首页 > 编程 > C++ > 正文

C++实现简单的学生管理系统

2020-05-23 14:19:03
字体:
来源:转载
供稿:网友

本文给大家分享的是使用C++实现的简单的学生管理系统的代码,主要是通过链表来实现,非常简洁,有需要的小伙伴可以参考下。

C++实现简单的学生管理系统

//Student.cpp

 

 
  1. #include<iostream> 
  2.  
  3. using namespace std; 
  4.  
  5. struct Stu 
  6. char no[10]; 
  7. char name[16]; 
  8. int math; 
  9. int chi; 
  10. double ave; 
  11. }; 
  12.  
  13. class Student 
  14. public
  15. Stu st; 
  16. Student * next; 
  17. public
  18. Student(){} 
  19. Student(Stu s) 
  20. st=s; 
  21. next=NULL; 
  22. st.ave=(st.math+st.chi)/2.0; 
  23. void setst(Stu s) 
  24. st=s; 
  25. st.ave=(st.math+st.chi)/2.0; 
  26. Stu getst() 
  27. return st; 
  28. void show() 
  29. cout<<"----------------------------"<<endl; 
  30. cout<<"学号:"<<st.no<<endl; 
  31. cout<<"姓名:"<<st.name<<endl; 
  32. cout<<"数学成绩:"<<st.math<<endl; 
  33. cout<<"语文成绩:"<<st.chi<<endl; 
  34. cout<<"平均成绩:"<<st.ave<<endl; 
  35. cout<<"----------------------------"<<endl; 
  36. }; 

//main.cpp

 

 
  1. #include<fstream> 
  2. #include"Student.cpp" 
  3.  
  4. using namespace std; 
  5.  
  6. Student * create_List(); 
  7. void traverse_List(Student * pHead); 
  8. bool is_empty(Student * pHead); 
  9. int length_List(Student * pHead); 
  10. bool insert_List(Student * pHead,int position,Stu st); 
  11. bool delete_List(Student * pHead,int position,Stu * st); 
  12. void sort_List(Student * pHead);  
  13. void menu_select(); 
  14. void handle_menu(int s); 
  15. void outFile(); 
  16. Student * inFile(); 
  17. void delFile(); 
  18.  
  19. Student * pHead; 
  20.  
  21.  
  22. void main() 
  23. menu_select(); 
  24.  
  25. void menu_select() 
  26. int s; 
  27. cout<<"请输入您要操作的选项:"<<endl; 
  28. cout<<"1.增加原始记录"<<endl; 
  29. cout<<"2.按平均分排序显示所有记录"<<endl; 
  30. cout<<"3.保存原始文件"<<endl; 
  31. cout<<"4.读取原始文件"<<endl; 
  32. cout<<"5.删除原始文件"<<endl; 
  33. cout<<"6.插入单条记录"<<endl; 
  34. cout<<"7.删除单条记录"<<endl; 
  35. cout<<"8.显示记录总条数"<<endl; 
  36. cout<<"9.结束程序运行"<<endl<<endl; 
  37. cout<<"左边数字对应功能选择,请选择1-9:"
  38. cin>>s; 
  39. handle_menu(s); 
  40.  
  41. void handle_menu(int s) 
  42. switch (s) 
  43. case 1: 
  44. system("cls"); 
  45. pHead=create_List(); 
  46. system("cls"); 
  47. menu_select(); 
  48. break
  49. case 2: 
  50. if(NULL==pHead) 
  51. cout<<"记录总条数为零"<<endl; 
  52. getchar(); 
  53. getchar(); 
  54. system("cls"); 
  55. menu_select(); 
  56. system("cls"); 
  57. sort_List(pHead); 
  58. traverse_List(pHead); 
  59. getchar(); 
  60. getchar(); 
  61. system("cls"); 
  62. menu_select(); 
  63. break
  64. case 3: 
  65. if(pHead!=NULL) 
  66. system("cls"); 
  67. outFile(); 
  68. system("cls"); 
  69. menu_select(); 
  70. system("cls"); 
  71. menu_select(); 
  72. break
  73. case 4: 
  74. system("cls"); 
  75. pHead=inFile(); 
  76. system("cls"); 
  77. menu_select(); 
  78. break
  79. case 5: 
  80. system("cls"); 
  81. delFile(); 
  82. system("cls"); 
  83. menu_select(); 
  84. break
  85. case 6: 
  86. if(NULL==pHead) 
  87. cout<<"记录总条数为零"<<endl; 
  88. getchar(); 
  89. getchar(); 
  90. system("cls"); 
  91. menu_select(); 
  92. system("cls"); 
  93. int num; 
  94. Stu st; 
  95. traverse_List(pHead); 
  96. cout<<"您想在哪条记录后插入,请输入序号:"
  97. cin>>num; 
  98. cout<<"编辑要插入的记录:"<<endl; 
  99. cout<<"学号:"
  100. cin>>st.no; 
  101. cout<<"姓名:"
  102. cin>>st.name; 
  103. cout<<"数学成绩:"
  104. cin>>st.math; 
  105. cout<<"语文成绩:"
  106. cin>>st.chi; 
  107. if(insert_List(pHead,num-1,st)) 
  108. cout<<"插入成功!"<<endl; 
  109. else 
  110. cout<<"插入失败!"<<endl; 
  111. getchar(); 
  112. getchar(); 
  113. system("cls"); 
  114. menu_select(); 
  115. break
  116. case 7: 
  117. if(NULL==pHead) 
  118. cout<<"记录总条数为零"<<endl; 
  119. getchar(); 
  120. getchar(); 
  121. system("cls"); 
  122. menu_select(); 
  123. int num; 
  124. Stu * st=(Stu *)malloc(sizeof(Stu)); 
  125. traverse_List(pHead); 
  126. cout<<endl<<"请输入您要删除的记录的序号:"
  127. cin>>num; 
  128. if(delete_List(pHead,num,st)) 
  129. cout<<endl<<"成功删除的记录如下:"<<endl; 
  130. cout<<"学号:"<<st->no<<endl<<"姓名:"<<st->name<<endl; 
  131. else 
  132. cout<<"删除失败!"<<endl; 
  133. getchar(); 
  134. getchar(); 
  135. system("cls"); 
  136. menu_select(); 
  137. break
  138. case 8: 
  139. if(NULL!=pHead) 
  140. system("cls"); 
  141. cout<<"记录总条数:"<<length_List(pHead)<<"条"<<endl; 
  142. getchar(); 
  143. getchar(); 
  144. system("cls"); 
  145. menu_select(); 
  146. else 
  147. cout<<"记录总条数为零"<<endl; 
  148. getchar(); 
  149. getchar(); 
  150. system("cls"); 
  151. menu_select(); 
  152. break
  153. case 9: 
  154. system("cls"); 
  155. cout<<"成功退出!"<<endl; 
  156. exit(0); 
  157. break
  158.  
  159.  
  160. void delFile() 
  161. ofstream fileout; 
  162. fileout.open("c://kcsj.txt",ios_base::out); 
  163. fileout<<""
  164. fileout.close(); 
  165.  
  166.  
  167. Student * inFile() 
  168. Student * pHead=(Student *)malloc(sizeof(Student)); 
  169. if(NULL==pHead) 
  170. cout<<"分配失败,程序终止!"<<endl; 
  171. exit(0); 
  172. Student * pTail=pHead; 
  173. pTail->next=NULL; 
  174. ifstream in("c://kcsj.txt"); 
  175. if (!in.is_open()) 
  176. cout << "Error opening file"<<endl;  
  177. exit(0); 
  178. while (!in.eof()) 
  179. Stu st; 
  180. in.read(reinterpret_cast<char *>(&st), sizeof(st)); 
  181. if (in.fail())  
  182. break
  183. Student * pNew=new Student(); 
  184. if(NULL==pNew) 
  185. printf("分配失败,程序终止/n"); 
  186. exit(0); 
  187. pNew->setst(st); 
  188. pTail->next=pNew; 
  189. pNew->next=NULL; 
  190. pTail=pNew; 
  191. in.close(); 
  192. return pHead; 
  193.  
  194.  
  195. void outFile() 
  196. ofstream out; 
  197. out.open("c://kcsj.txt",ios_base::out|ios_base::app|ios::binary); 
  198. if(!out) 
  199. cout<<"文件不存在,退出时别忘记保存文件!"<<endl; 
  200. out.close(); 
  201. out.open("stu.dat",ios_base::out|ios::binary); 
  202. else 
  203. {  
  204. out.close(); 
  205. out.open("c://kcsj.txt",ios_base::out|ios_base::app|ios::binary); 
  206. Student * temp=pHead->next; 
  207. while(temp!=NULL) 
  208. Stu st=temp->getst(); 
  209. out.write(reinterpret_cast<char *>(&st), sizeof(st)); 
  210. temp=temp->next; 
  211. }  
  212. out.close(); 
  213.  
  214. Student * create_List() 
  215. int len; 
  216. Student * pHead=(Student *)malloc(sizeof(Student)); 
  217. if(NULL==pHead) 
  218. cout<<"分配失败,程序终止!"<<endl; 
  219. exit(0); 
  220. Student * pTail=pHead; 
  221. pTail->next=NULL; 
  222. cout<<"请输入要存储的学生人数:"
  223. cin>>len; 
  224. for(int i=0;i<len;i++) 
  225. Stu st; 
  226. cout<<"请输入第"<<i+1<<"个学生的学号:"
  227. cin>>st.no; 
  228. cout<<"请输入第"<<i+1<<"个学生的姓名:"
  229. cin>>st.name; 
  230. cout<<"请输入第"<<i+1<<"个学生的数学成绩:"
  231. cin>>st.math; 
  232. cout<<"请输入第"<<i+1<<"个学生的语文成绩:"
  233. cin>>st.chi; 
  234. Student * pNew=new Student(); 
  235. if(NULL==pNew) 
  236. printf("分配失败,程序终止/n"); 
  237. exit(0); 
  238. pNew->setst(st); 
  239. pTail->next=pNew; 
  240. pNew->next=NULL; 
  241. pTail=pNew; 
  242. return pHead; 
  243.  
  244. void traverse_List(Student * pHead) 
  245. int i=1; 
  246. Student * temp=pHead->next; 
  247. while(temp!=NULL) 
  248. cout<<endl<<"序号:"<<i<<endl; 
  249. temp->show(); 
  250. temp=temp->next; 
  251. i++; 
  252. }  
  253.  
  254. bool is_empty(Student * pHead) 
  255. if(NULL==pHead->next) 
  256. return true
  257. else 
  258. return false
  259.  
  260. int length_List(Student * pHead) 
  261. int len=0; 
  262. Student * temp=pHead->next; 
  263. while(temp) 
  264. len++; 
  265. temp=temp->next; 
  266. return len; 
  267.  
  268. bool insert_List(Student * pHead,int position,Stu st) 
  269. int i=0; 
  270. Student * p=pHead; 
  271.  
  272. while(NULL!=p&&i<position-1) 
  273. p=p->next; 
  274. i++; 
  275. if(i>position-i||NULL==p) 
  276. return false
  277. Student * pNew=(Student *)malloc(sizeof(Student)); 
  278. if(NULL==pNew) 
  279. cout<<"分配失败,程序终止"<<endl; 
  280. exit(0); 
  281. pNew->setst(st); 
  282. pNew->next=p->next; 
  283. p->next=pNew; 
  284. return true
  285.  
  286. bool delete_List(Student * pHead,int position,Stu * st) 
  287. int i=0; 
  288. Student * p=pHead; 
  289.  
  290. while(NULL!=p->next&&i<position-1) 
  291. p=p->next; 
  292. i++; 
  293. Student * q=p->next; 
  294. *st=q->getst(); 
  295. p->next=p->next->next; 
  296. free(q); 
  297. q=NULL; 
  298. return true
  299.  
  300. void sort_List(Student * pHead) 
  301. Student * p,* q; 
  302. Stu temp; 
  303. int i,j; 
  304. int len=length_List(pHead); 
  305. for(i=0,p=pHead->next;i<len-1;i++,p=p->next) 
  306. for(j=i+1,q=p->next;j<len;j++,q=q->next) 
  307. if(q->st.ave>p->st.ave) 
  308. temp=q->st; 
  309. q->st=p->st; 
  310. p->st=temp; 
  311. }  

以上所述就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表