11_97.cpp
上传用户:zipjojo
上传日期:2009-07-20
资源大小:70k
文件大小:3k
源码类别:

文章/文档

开发平台:

C/C++

  1. #include<iostream.h>
  2. #include<fstream.h>
  3. #include<iomanip.h>
  4. static int n=0;
  5. int comp(char*,char*);
  6. class MyFriend
  7. {
  8. char tag;
  9. unsigned int age;
  10. char name[12];
  11. char TelNo[12];
  12. public:
  13. int getMyFriendNo(){return age;}
  14. void getdata()
  15. {
  16. tag='#';
  17. cout<<"(年龄 姓名 电话):";
  18. cin>>age>>name>>TelNo;
  19. }
  20. char gettag(){return tag;}
  21. void disp()
  22. {
  23. if(tag=='#')
  24. cout<<setiosflags(ios::left)
  25.  <<setw(6)<<age<<setw(10)<<name<<setw(7)<<TelNo<<endl;
  26. }
  27. char *getname()
  28. {
  29. return name;
  30. }
  31. };
  32. void func1()
  33. {
  34. ofstream output("MyFrd.dat");
  35. MyFriend s;
  36. cout<<"输入数据"<<endl;
  37. cout<<"我的朋友人数:";
  38. cin>>n;
  39. for(int i=0;i<n;i++)
  40. {
  41. cout<<"第"<<i+1<<"个我的朋友";
  42. s.getdata();
  43. output.write((char *)&s,sizeof(s));
  44. };
  45. output.close();
  46. }
  47. void func2()
  48. {
  49. ifstream input("MyFrd.dat");
  50. MyFriend s;
  51. cout<<"输入数据:"<<endl;
  52. cout<<setiosflags(ios::left)
  53. <<setw(6)<<"年龄"<<setw(10)<<"姓名"<<setw(7)<<"电话"<<endl;
  54. input.read((char *)&s,sizeof(s));
  55. while(input)
  56. {
  57. s.disp();
  58. input.read((char*)&s,sizeof(s));
  59. };
  60. input.close();
  61. }
  62. void func3()
  63. {
  64. char sname[10];
  65. ifstream file("MyFrd.dat");
  66. MyFriend one;
  67. file.seekg(0);
  68. cout<<"输入要查询的姓名(可只输入姓氏):";
  69. cin>>sname;
  70. cout<<"输出查询结果:"<<endl;
  71. cout<<setw(6)<<"年龄"<<setw(10)<<"姓名"<<setw(6)<<"电话"<<endl;
  72. file.read((char *)&one,sizeof(one));
  73. while(file)
  74. {
  75. if(comp(one.getname(),sname)==1)
  76. one.disp();
  77. file.read((char*)&one,sizeof(one));
  78. };
  79. file.close();
  80. }
  81. void func4()
  82. {
  83. fstream outapp("MyFrd.dat",ios::app);
  84.     MyFriend one;
  85. cout<<"添加数据:";
  86. one.getdata();
  87. outapp.write((char*)&one,sizeof(one));
  88. outapp.close();
  89. }
  90. void func5()
  91. {
  92. char  sname[12] ;int i=0;
  93. fstream outdel("MyFrd.dat",ios::in|ios::out);
  94. MyFriend one;
  95. outdel.seekg(0);
  96. cout<<"输入要删除的姓名(可只输入姓氏):";
  97. cin>>sname;
  98. while(!outdel.eof())
  99. {
  100. outdel.seekp(sizeof(MyFriend)*i);
  101.         outdel.read((char *)&one,sizeof(one));
  102. if(comp(one.getname(),sname)==1 && one.gettag()=='#')
  103. {
  104. outdel.seekp(sizeof(MyFriend)*i);
  105. outdel.put('*');
  106. }
  107.         i++;
  108. }
  109. outdel.close();
  110. }
  111. void func6()
  112. {
  113. fstream outdel("MyFrd.dat",ios::in);
  114. fstream temp("temp",ios::out|ios::trunc);
  115.     MyFriend s;
  116. while(!outdel.eof())
  117. {
  118. outdel.read((char *)&s,sizeof(MyFriend));
  119. if(s.gettag()=='#')
  120. temp.write((char *)&s,sizeof(MyFriend));
  121. }
  122. outdel.close();
  123. temp.close();
  124. fstream outdel1("MyFrd",ios::out|ios::trunc);
  125. fstream temp1("temp",ios::in);
  126. while(!temp1.eof())
  127. {
  128. temp1.read((char *)&s,sizeof(MyFriend));
  129. outdel1.write((char *)&s,sizeof(MyFriend));
  130. }
  131. outdel1.close();
  132. temp1.close();
  133. cout<<"此记录已物理删除"<<endl;
  134. }
  135. int comp(char s1[],char s2[])
  136. {
  137. int i=0;
  138. while(s1[i]!='' && s2[i]!='' && s1[i]==s2[i])
  139. i++;
  140. if(s1[i]=='' || s2[i]=='')
  141. return 1;
  142.     else
  143. return 0;
  144. }
  145. void main()
  146. {
  147. int sel;
  148. do
  149. {
  150. cout<<"请选择(1:输入数据 2:输出数据 3:按姓名查询" <<endl
  151. <<"4:添加数据 5:逻辑删除 6:物理删除 其它退出):";
  152. cin>>sel;
  153. switch(sel)
  154. {
  155.        case 1:func1();break;
  156.        case 2:func2();break;
  157.  case 3:func3();break;
  158.  case 4:func4();break;
  159.  case 5:func5();break;
  160.  case 6:func6();break;
  161. }
  162. }while(sel>=1 && sel<=6);
  163. }