找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1858|回复: 0
打印 上一主题 下一主题
收起左侧

C语言程序学生信息系统源程序

[复制链接]
跳转到指定楼层
楼主
ID:585024 发表于 2019-7-17 10:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define N 100    //----------------------------------------函数声明
  4. void init();
  5. char welcome();
  6. void InputInfo();
  7. void view();
  8. void xiugai();
  9. void DeleteInfo();
  10. void paiming1(struct student_info student[]); void paiming2(struct student_info student[]); void ViewAll();
  11. void PaimingView();
  12. void exit();
  13. struct student_info input();
  14. void SortInfo(struct student_info student[]); void ViewInfo(struct student_info *sp);
  15. void SaveStruct(struct student_info *sp,int size,int n,char filename[20]);
  16. void LoadStruct(struct student_info *sp,int size,int n,char filename[20]);
  17. void SaveInt(int *p,int size,int n,char filename[20]); void LoadInt(int *p,int size,int n,char filename[20]); int NumExist(struct student_info student[],int num);
  18. //---------------------------------定义学生信息结构体
  19. struct student_info
  20. {
  21. int num; //学号
  22. char name[6]; //姓名
  23. char sex[5]; //性别
  24. char adress[20]; //家庭住址
  25. char tel[10]; //电话
  26. int chinese,math,english,huping,pingde,jiaoping,paiming1,paiming2;
  27. //语文 数学 英语 互评 品德 教评
  28. double ave,zhongping;
  29. // 平均 综合
  30. //每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、 //考试平均成绩、考试名次、师兄互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次。 //考试平均成绩、师兄互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%。 };
  31. //---------------------------------定义全局结构体数据
  32. };
  33. struct student_info student[100];
  34. int counter,PM;
  35. //----------------------------------------------主函数
  36. void main()
  37. {
  38. char select;
  39. init(); //调用初始化函数
  40. while(1)
  41. {
  42. select=welcome();
  43. switch(select)
  44. {
  45. case '1': system("cls"); InputInfo(); break; //选项1:输入学生信息
  46. case '2': system("cls"); xiugai(); break; //选项2:修改学生信息         
  47. case '3': system("cls");DeleteInfo(); break; //选项3:删除学生信息            
  48. case '4': system("cls");  view(); break; //选项4:浏览学生信息
  49. case '5': system("cls");paiming1(student);paiming2(student);PM=1;getchar();
  50. getchar(); system("cls"); break; //选项5:学生信息排名
  51. case '6': system("cls"); ViewAll();break; //选项6:浏览全部学生信息
  52. case '7': system("cls"); PaimingView();break; //选项7:查询排名
  53. case '8': system("cls"); exit(); break; //选项8:退出
  54. }}}    //----------------------------------------初始化函数
  55. void init()
  56. {
  57. FILE *fp;
  58. fp=fopen("counter.dat","rb"); //打开计数变量counter文件
  59. if(fp!=NULL) //载入counter
  60. {
  61. fclose(fp);
  62. LoadInt(&counter,sizeof(counter),1,"counter.dat");
  63. }
  64. else
  65. {
  66. fp=fopen("counter.dat","wb"); //若没有counter文件,则创建一个,counter初始为0。
  67. fclose(fp);
  68. counter=0;
  69. }
  70. if(counter!=0) //载入学生数据
  71. LoadStruct(student,sizeof(struct student_info),counter,"student_info.dat");
  72. }  //----------------------------------------欢迎函数
  73. char welcome()
  74. {
  75. char select;
  76. while(1)
  77. {
  78. system("cls");
  79. printf("\t\t欢迎使用学生信息管理系统 \n");
  80. printf("\n");
  81. printf("1.录入学生信息 \n\n");
  82. printf("2.修改学生信息 \n\n");
  83. printf("3.删除学生信息 \n\n");
  84. printf("4.浏览学生信息 \n\n");
  85. printf("5.排名学生成绩 \n\n");
  86. printf("6.浏览所有学生信息 \n\n");
  87. printf("7.查询排名 \n\n");
  88. printf("8.退出 \n\n");
  89. printf("输入相应的功能序号:");
  90. select=getchar();
  91. if(select=='1'||select=='2'||select=='3'||select=='4'||select=='5'||select=='6'||select=='7'||select=='8')
  92. return select;
  93. system("cls");
  94. continue;
  95. }}
  96. //----------------------------------1.录入学生信息-----------------------------------
  97. void InputInfo()
  98. {
  99. int i,n;
  100. printf("需要录入多少位学生的信息:");
  101. scanf("%d",&n);
  102. system("cls");
  103. for(i=1;i<=n;i++)
  104. {
  105. student[counter]=input();
  106. counter++;
  107. }
  108. PM=0;
  109. SortInfo(student);
  110. SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");
  111. SaveInt(&counter,sizeof(counter),1,"counter.dat");
  112. }
  113. //-------------------------------------2.修改学生信息----------------------------------------
  114. void xiugai()
  115. {
  116. int i,num;
  117. char YN,select;
  118. printf("请输入需要修改的学生信息的学号:");
  119. scanf("%d",&num);
  120. getchar();
  121. if((i=NumExist(student,num))==-1)
  122. {
  123. printf("不存在该学号,按回车键返回...");
  124. getchar();
  125. system("cls");
  126. return;
  127. }
  128. ViewInfo(&student[i]);
  129. printf("是否要修改,(Y/N):");
  130. scanf("%c",&YN);
  131. getchar();
  132. if(YN !='Y'&& YN !='y')
  133. {
  134. printf("修改取消.");
  135. getchar();
  136. system("cls");
  137. return;
  138. }
  139. system("cls");
  140. printf("1.学号 \n");printf("2.性别 \n");printf("3.家庭住址 \n");printf("4.联系电话 \n");printf("5.语文成绩 \n");
  141. printf("6.数学成绩 \n");printf("7.外语成绩 \n");printf("8.师兄互评分 \n");printf("9.品德成绩 \n");printf("0.任课教师教师评分 \n");
  142. scanf("%c",&select);
  143. switch(select)
  144. {
  145. case '1':printf("修改学号:");scanf("%d",&student[i].num);break;
  146. case '2':printf("修改性别:");scanf("%s",&student[i].sex);break;
  147. case '3':printf("修改家庭住址:");scanf("%s",&student[i].adress);break;
  148. case '4':printf("修改联系电话:");scanf("%s",&student[i].tel);break;
  149. case '5':printf("修改语文成绩:");scanf("%d",&student[i].chinese);break;
  150. case '6':printf("修改数学成绩:");scanf("%d",&student[i].math);break;
  151. case '7':printf("修改外语成绩:");scanf("%d",&student[i].english);break;
  152. case '8':printf("修改师兄互评分:");scanf("%d",&student[i].huping);break;
  153. case '9':printf("修改品德成绩:");scanf("%d",&student[i].pingde);break;
  154. case '0':printf("修改任课教师评分:");scanf("%d",&student[i].jiaoping);break;
  155. }
  156. SortInfo(student);
  157. SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");
  158. PM=0;
  159. getchar();
  160. printf("修改完成...");
  161. getchar();
  162. system("cls");
  163. }
  164. //-------------------------------------3.删除学生信息----------------------------------------
  165. void DeleteInfo()
  166. {
  167. int i,j,num;
  168. char YN;
  169. printf("请输入要删除的学生信息学号:");
  170. scanf("%d",&num);
  171. getchar();
  172. if((i=NumExist(student,num))==-1)
  173. {
  174. printf("没有该学号,按回车键返回...");
  175. getchar();
  176. system("cls");
  177. return;
  178. }
  179. ViewInfo(&student[i]);
  180. printf("\n确认删除(Y/N):");
  181. scanf("%c",&YN);
  182. getchar();
  183. if(YN!='Y' && YN!='y')
  184. {
  185. printf("删除取消...");
  186. }
  187. else
  188. {
  189. for(j=i;j<counter-1;j++)
  190. student[j]=student[j+1];
  191. counter--;
  192. PM=0;
  193. SaveStruct(student,sizeof(struct student_info),counter,"student_info.dat");
  194. SaveInt(&counter,sizeof(counter),counter,"counter.dat");
  195. printf("删除完成...");
  196. }
  197. getchar();
  198. system("cls");
  199. }
  200. //-------------------------------------4.浏览学生信息----------------------------------------
  201. void view()
  202. {
  203. int i,num;
  204. printf("请输入需要游览的学生信息的学号:");
  205. scanf("%d",&num);
  206. getchar();
  207. if((i=NumExist(student,num))==-1)
  208. {
  209. printf("不存在该学号,按回车键返回...");
  210. getchar();
  211. system("cls");
  212. return;
  213. }
  214. ViewInfo(&student[i]);
  215. printf("\n按回车键返回...");
  216. getchar();
  217. system("cls");
  218. return;
  219. }
  220. //-------------------------------------5.平均分、综合分排名------------------------------------
  221. void paiming1(struct student_info student[])
  222. {
  223. struct student_info *p[N],*temp;
  224. int i,j;
  225. for(i=0;i<counter;i++)
  226. p[i]=&student[i];
  227. for(i=0;i<counter-1;i++)
  228. for(j=i+1;j<counter;j++)
  229. {
  230. if(p[i]->ave < p[j]->ave)
  231. {
  232. temp=p[i];
  233. p[i]=p[j];
  234. p[j]=temp;
  235. }
  236. }
  237. for(i=0;i<counter;i++)
  238. p[i]->paiming1=i+1;
  239. printf("平均分排名完成...\n");
  240. }
  241. //综合测评分排名
  242. void paiming2(struct student_info student[])
  243. {
  244. struct student_info *p[N],*temp;
  245. int i,j;
  246. for(i=0;i<counter;i++)
  247. p[i]=&student[i];
  248. for(i=0;i<counter-1;i++)
  249. for(j=i+1;j<counter;j++)
  250. {
  251. if(p[i]->zhongping < p[j]->zhongping)
  252. {
  253. temp=p[i];
  254. p[i]=p[j];
  255. p[j]=temp;
  256. }
  257. }
  258. for(i=0;i<counter;i++)
  259. p[i]->paiming2=i+1;
  260. printf("综合测评分排名完成...\n"); }
  261. //----------------------------------6.浏览所有学生信息----------------------------------------
  262. void ViewAll()
  263. {
  264. int i;
  265. for(i=0;i<counter;i++)
  266. {
  267. ViewInfo(&student[i]);
  268. printf("\n");
  269. }
  270. getchar();
  271. printf("回车键返回...");
  272. getchar();
  273. system("cls");
  274. }
  275. //----------------------------------------7.查询排名------------------------------
  276. void PaimingView()
  277. {
  278. int i,num;
  279. printf("输入要查询的学号:");
  280. scanf("%d",&num);
  281. getchar();
  282. i=NumExist(student,num);
  283. if(i==-1)
  284. {
  285. printf("该学号不存在...");
  286. getchar();
  287. return;
  288. }
  289. if(PM==0)
  290. {
  291. printf("请先进行成绩排名...");
  292. getchar();
  293. return;
  294. }
  295. printf("%s的平均分排名%d\n",student[i].name,student[i].paiming1);
  296. printf("%s的综合测评分排名%d\n",student[i].name,student[i].paiming2);
  297. printf("按回车键返回...");
  298. getchar();
  299. return;
  300. }
  301. //----------------------------------------8.退出----------------------------
  302. void exit()
  303. {
  304. printf("谢谢使用!\n");
  305. exit(0);
  306. }
  307. //----------------------------------------输入信息函数----------------------------------------
  308. struct student_info input() {
  309. struct student_info stu,*sp;
  310. char YN;
  311. sp=&stu;
  312. while(1)
  313. {
  314. while(1)
  315. {
  316. printf("录入学号:");
  317. scanf("%d",&sp->num);
  318. getchar();
  319. if(NumExist(student,sp->num)!=-1)
  320. {
  321. printf("该学号已存在,请重新输入...");
  322. getchar();
  323. system("cls");
  324. continue;
  325. }
  326. break;
  327. }
  328. printf("录入姓名:");
  329. gets(sp->name);
  330. printf("录入性别:");
  331. gets(sp->sex);
  332. printf("录入家庭住址:");
  333. gets(sp->adress);
  334. printf("录入联系电话:");
  335. gets(sp->tel);
  336. printf("\n接下来录入成绩\n");
  337. printf("语文:");
  338. scanf("%d",&sp->chinese);
  339. printf("数学:");
  340. scanf("%d",&sp->math);
  341. printf("英语:");
  342. scanf("%d",&sp->english);
  343. sp->ave=(sp->chinese+sp->math+sp->english)/3.0;
  344. printf("师兄互评:");
  345. scanf("%d",&sp->huping);
  346. printf("品德分数:");
  347. scanf("%d",&sp->pingde);
  348. printf("教师评价:");
  349. scanf("%d",&sp->jiaoping);
  350. getchar();
  351. sp->zhongping=(sp->ave*0.6+sp->huping*0.1+sp->pingde*0.1+sp->jiaoping*0.2);
  352. printf("录入完毕,确认信息是否正确(Y/N)");
  353. YN=getchar();
  354. getchar();
  355. if(YN=='Y'|| YN=='y')
  356. break;
  357. else
  358. {
  359. printf("按回车键重新录入信息。");
  360. getchar();
  361. system("cls");
  362. continue;
  363. }
  364. }
  365. system("cls");
  366. return stu;
  367. }
  368. //----------------------------------------排序函数
  369. void SortInfo(struct student_info student[])
  370. {
  371. int i,j;
  372. struct student_info temp;
  373. for(i=0;i<counter-1;i++)
  374. for(j=i+1;j<=counter-1;j++)
  375. {if(student[i].num<student[j].num)
  376. {temp=student[i];
  377. student[i]=student[j];
  378. student[j]=temp;}}
  379. }
  380. //----------------------------------------显示学生信息
  381. void ViewInfo(struct student_info *sp)
  382. {
  383. printf("学号\t姓名\t性别\t家庭住址\t联系电话\n");
  384. printf("%d\t%s\t%s\t%s\t\t%s\n",sp->num,sp->name,sp->sex,sp->adress,sp->tel);
  385. printf("语文\t数学\t英语\t互评\t品德\t教评\t平均分\t综合分\n");
  386. printf("%d\t%d\t%d\t%d\t%d\t%d\t%.2f\t%.2f\t\n",sp->chinese,sp->math,sp->english,sp->huping,sp->pingde,sp->jiaoping,sp->ave,sp->zhongping);
  387. if(PM==1)
  388. {
  389. printf("平均分排名\t综合测评分排名\n");
  390. printf("%d\t\t%d\n",sp->paiming1,sp->paiming2);
  391. }
  392. }
  393. //-----------------------------------信息存盘(结构体)----------------------------------------
  394. void SaveStruct(struct student_info *sp,int size,int n,char filename[20])
  395. {
  396. FILE *fp;
  397. fp=fopen(filename,"wb");
  398. fwrite(sp,size,n,fp);
  399. fclose(fp);
  400. }
  401. //-----------------------------------读取信息(结构体)----------------------------------------
  402. void LoadStruct(struct student_info *sp,int size,int n,char filename[20])
  403. {
  404. FILE *fp;
  405. fp=fopen(filename,"rb");
  406. fread(sp,size,n,fp);
  407. fclose(fp);
  408. }
  409. //-------------------------------------信息存盘(整型)----------------------------------------
  410. void SaveInt(int *p,int size,int n,char filename[20])
  411. {
  412. FILE *fp;
  413. fp=fopen(filename,"wb");
  414. fwrite(p,size,n,fp);
  415. fclose(fp);
  416. }
  417. //-------------------------------------读取信息(整型)----------------------------------------
  418. void LoadInt(int *p,int size,int n,char filename[20])
  419. {
  420. FILE *fp;
  421. fp=fopen(filename,"rb");
  422. fread(p,size,n,fp);
  423. fclose(fp);
  424. }
  425. //----------------------------------------检索学号
  426. int NumExist(struct student_info student[],int num)
  427. {
  428. int i;
  429. for(i=0;i<counter;i++)
  430. {
  431. if(student[i].num==num)
  432. return i;
  433. }
  434. return -1;
  435. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表