• C语言学生信息管理系统


    这是我在学完C语言后对所学知识的整体运用,记录如下,代码已经过验证,不必怀疑其正确性。读者若有疑问,可以私信我。废话不多说,直接上代码。

    1. #include
    2. #include
    3. #include
    4. #define len 15 /* 学号和姓名最大字符数*/
    5. #define N 50 /* 最大学生人数*/
    6. #define MAX_LINE 1024 /* 最大打开文件行数*/
    7. struct Student /*学生信息结构体*/
    8. {
    9. int q;
    10. char code[len+1]; /* 学号*/
    11. char name[len+1]; /* 姓名*/
    12. int age; /* 年龄*/
    13. char sex; /* 性别*/
    14. char object[len+1]; /* 专业*/
    15. char room[len+1]; /* 班级*/
    16. float score[4]; /* 4门课程成绩*/
    17. float sum; /* 总分*/
    18. float average; /* 平均分*/
    19. } stu[N]; /*定义结构体数组*/
    20. int k=1,n=0, m=0; /* 定义全局变量,n代表当前记录的学生人数,m为新增加的学生人数*/
    21. /*函数声明*/
    22. void seek(); //查找信息
    23. void modify(); //修改信息
    24. void insert(); //插入信息
    25. void del(); //删除信息
    26. void display(); //显示信息
    27. void menu(); //显示菜单
    28. void save(); //保存信息
    29. void refresh(); //刷新信息
    30. void help(); //帮助
    31. void open(); //调取学生成绩文档
    32. /*主函数*/
    33. int main()
    34. {
    35. while(k) menu();
    36. system("pause");
    37. return 0;
    38. }
    39. void help() /*帮助*/
    40. {
    41. printf("\n0.欢迎使用系统帮助!\n");
    42. printf("\n1.初次进入系统后,请先从文件读入信息,再执行其他操作;若文件不存在或者没有内容,请选择增加学生信息;\n");
    43. printf("\n2.按照菜单提示键入数字代号;\n");
    44. printf("\n3.增加学生信息后,切记保存;\n");
    45. printf("\n4.谢谢您的使用!\n");
    46. }
    47. void seek() /*查找*/
    48. {
    49. int i,item,flag; /*item代表选择查询的子菜单编号,flag代表是否查找成功*/
    50. char s1[21]; /* 以姓名和学号最长长度+1为准*/
    51. printf("------------------\n");
    52. printf("-----1.按学号查询-----\n");
    53. printf("-----2.按姓名查询-----\n");
    54. printf("-----3.退出本菜单-----\n");
    55. printf("------------------\n");
    56. while(1)
    57. {
    58. printf("请选择子菜单编号:");
    59. scanf("%d",&item);
    60. flag=0;
    61. switch(item)
    62. {
    63. case 1:
    64. printf("请输入要查询的学生的学号:\n");
    65. scanf("%s",s1);
    66. for(i=0; i
    67. if(strcmp(stu[i].code,s1)==0)/*strcmp是比较函数*/
    68. {
    69. flag=1;
    70. printf("学生学号 学生姓名 年龄 性别 专 业 班 级 C语言 数学 英语 军理 总成绩 平均分\n");
    71. printf("----------------------------------------------------------------------------------------------\n");
    72. stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
    73. stu[i].average=stu[i].sum/4.0;
    74. printf("%-10s%-8s%4d%5c%11s%7s%8.1f%8.1f%8.1f%7.1f%9.1f%9.1f\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,
    75. stu[i].object,stu[i].room,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,
    76. stu[i].average);
    77. }
    78. if(0==flag) printf("该学号不存在!\n");
    79. break;
    80. case 2:
    81. printf("请输入要查询的学生的姓名:\n");
    82. scanf("%s",s1);
    83. for(i=0; i
    84. if(strcmp(stu[i].name,s1)==0)
    85. {
    86. flag=1;
    87. printf("学生学号 学生姓名 年龄 性别 专 业 班 级 C语言 数学 英语 军理 总成绩 平均分\n");
    88. printf("----------------------------------------------------------------------------------------------\n");
    89. stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
    90. stu[i].average=stu[i].sum/4.0;
    91. printf("%-10s%-8s%4d%5c%11s%7s%8.1f%8.1f%8.1f%7.1f%9.1f%9.1f\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,
    92. stu[i].object,stu[i].room,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,
    93. stu[i].average);
    94. }
    95. if(0==flag) printf("该姓名不存在!\n");
    96. break;
    97. case 3:
    98. return;
    99. default:
    100. printf("请在1-3之间选择\n");
    101. }
    102. }
    103. }
    104. void modify()/*修改信息*/
    105. {
    106. int i,item,num=-1; /*item代表选择修改的子菜单编号,num保存要修改信息的学生的序号*/
    107. char sex1,s1[len+1],s2[len+1],object1[len+1],room1[len+1]; /* 以姓名和学号最长长度+1为准*/
    108. float score1;
    109. printf("请输入要修改的学生的学号:\n");
    110. scanf("%s",s1);
    111. for(i=0; i
    112. if(strcmp(stu[i].code,s1)==0) /*比较字符串是否相等*/
    113. num=i; /*保存要修改信息的学生的序号*/
    114. if(num!=-1)
    115. {
    116. printf("------------------\n");
    117. printf("1.修改姓名\n");
    118. printf("2.修改年龄\n");
    119. printf("3.修改性别\n");
    120. printf("4.修改专业\n");
    121. printf("5.修改班级\n");
    122. printf("6.修改C语言成绩\n");
    123. printf("7.修改高等数学成绩\n");
    124. printf("8.修改大学英语成绩\n");
    125. printf("9.修改军事理论成绩\n");
    126. printf("10.退出本菜单\n");
    127. printf("------------------\n");
    128. while(1)
    129. {
    130. printf("请选择子菜单编号:");
    131. scanf("%d",&item);
    132. switch(item)
    133. {
    134. case 1:
    135. printf("请输入新的姓名:\n");
    136. scanf("%s",s2);
    137. strcpy(stu[num].name,s2);
    138. break;
    139. case 2:
    140. printf("请输入新的年龄:\n");
    141. scanf("%d",stu[num].age);
    142. break;
    143. case 3:
    144. printf("请输入新的性别(男:1,女:2):\n");
    145. scanf("%c",&sex1);
    146. stu[num].sex=sex1;
    147. break;
    148. case 4:
    149. printf("请输入新的专业:\n");
    150. scanf("%s",object1);
    151. strcpy(stu[num].object,object1);
    152. break;
    153. case 5:
    154. printf("请输入新的班级:\n");
    155. scanf("%s",room1);
    156. strcpy(stu[num].room,room1);
    157. break;
    158. case 6:
    159. printf("请输入新的C语言成绩:\n");
    160. scanf("%f",&score1);
    161. stu[num].score[0]=score1;
    162. break;
    163. case 7:
    164. printf("请输入新的高等数学成绩:\n");
    165. scanf("%f",&score1);
    166. stu[num].score[1]=score1;
    167. break;
    168. case 8:
    169. printf("请输入新的大学英语成绩:\n");
    170. scanf("%f",&score1);
    171. stu[num].score[2]=score1;
    172. break;
    173. case 9:
    174. printf("请输入新的军事理论成绩:\n");
    175. scanf("%f",&score1);
    176. stu[num].score[2]=score1;
    177. break;
    178. case 10:
    179. return;
    180. default:
    181. printf("请在1-10之间选择\n");
    182. }
    183. }
    184. }
    185. printf("修改完毕!显示结果请选择菜单6,并请及时保存!\n");
    186. system("pause");
    187. }
    188. void sort()/*按学号排序*/
    189. {
    190. int i,j,k,*p,*q,s;
    191. char temp[len+1],ctemp;
    192. float ftemp;
    193. for(i=0; i-1; i++)
    194. {
    195. for(j=n-1; j>i; j--) //冒泡法排序
    196. if(strcmp(stu[j-1].code,stu[j].code)>0)
    197. {
    198. strcpy(temp,stu[j-1].code); // strcpy函数
    199. strcpy(stu[j-1].code,stu[j].code);
    200. strcpy(stu[j].code,temp);
    201. strcpy(temp,stu[j-1].name);
    202. strcpy(stu[j-1].name,stu[j].name);
    203. strcpy(stu[j].name,temp);
    204. ctemp=stu[j-1].sex;
    205. stu[j-1].sex=stu[j].sex;
    206. stu[j].sex=ctemp;
    207. p=&stu[j-1].age;
    208. q=&stu[j].age;
    209. s=*q;
    210. *q=*p;
    211. *p=s;
    212. for(k=0; k<4; k++)
    213. {
    214. ftemp=stu[j-1].score[k];
    215. stu[j-1].score[k]=stu[j].score[k];
    216. stu[j].score[k]=ftemp;
    217. }
    218. }
    219. }
    220. }
    221. void insert()/*插入函数*/
    222. {
    223. int i=n,j,flag; //n为现有学生人数
    224. printf("请输入待增加的学生数:\n");
    225. scanf("%d",&m);
    226. if(m>0)
    227. {
    228. do
    229. {
    230. flag=1;
    231. while(flag)
    232. {
    233. flag=0;
    234. //printf("请输入第%d位学生的学号:\n",i+1);
    235. //scanf("%s",&stu[i].code);
    236. for(j=0; j/*与之前已有学号比较,如果重复,则置flag为0,重新进入循环体内输入*/
    237. if(strcmp(stu[i].code,stu[j].code)==0)
    238. {
    239. printf("已有该学号,请检查后重新输入!\n");
    240. flag=1;
    241. break; /*如有重复立即退出该层循环,提高判断速度*/
    242. }
    243. }
    244. printf("请输入第 %d 个学生的学号:\n",i+1);
    245. scanf("%s",stu[i].code);
    246. printf("请输入第 %d 个学生的姓名:\n",i+1);
    247. scanf("%s",stu[i].name);
    248. printf("请输入第 %d 个学生的年龄:\n",i+1);
    249. scanf("%d",&stu[i].age);
    250. printf("请输入第 %d 个学生的性别(男:1,女:2):\n",i+1);
    251. scanf(" %c",&stu[i].sex);
    252. printf("请输入第 %d 个学生的专业:\n",i+1);
    253. scanf(" %s",&stu[i].object);
    254. printf("请输入第 %d 个学生的班级:\n",i+1);
    255. scanf(" %s",&stu[i].room);
    256. printf("请输入第 %d 个学生的C语言成绩\n",i+1);
    257. scanf("%f",&stu[i].score[0]);
    258. printf("请输入第 %d 个学生的高等数学成绩:\n",i+1);
    259. scanf("%f",&stu[i].score[1]);
    260. printf("请输入第 %d 个学生的大学英语成绩:\n",i+1);
    261. scanf("%f",&stu[i].score[2]);
    262. printf("请输入第 %d 个学生的军事理论成绩:\n",i+1);
    263. scanf("%f",&stu[i].score[3]);
    264. if(flag==0) i++; /*与之前已有学生学号无重复,学生人数加1*/
    265. }
    266. while(i
    267. }
    268. n+=m;
    269. printf("信息增加完毕!\n\n");
    270. sort();
    271. system("pause");
    272. }
    273. void del() /*删除信息*/
    274. {
    275. int i,j,flag=0; //flag为查找成功标志,0表示查找失败,1表示查找成功
    276. char s1[len+1];
    277. printf("请输入要删除学生的学号:\n");
    278. scanf("%s",s1);
    279. for(i=0; i
    280. if(strcmp(stu[i].code,s1)==0) //找到要删除的学生记录
    281. {
    282. flag=1;
    283. for(j=i; j-1; j++) //后面的学生记录向前移动
    284. stu[j]=stu[j+1];
    285. }
    286. if(flag==0) printf("该学号不存在!\n"); /*查找失败*/
    287. if(flag==1)
    288. {
    289. printf("删除成功,显示结果请选择菜单\n");
    290. n--; //删除成功后,学生人数减1
    291. }
    292. system("pause");
    293. }
    294. void display()/* 输出学生信息*/
    295. {
    296. int i;
    297. printf("共有%d位学生的信息:\n",n);
    298. if(0!=n)
    299. {
    300. printf("学生学号 学生姓名 年龄 性别 专 业 班 级 C语言 数学 英语 军理 总成绩 平均分\n");
    301. printf("----------------------------------------------------------------------------------------------\n");
    302. for(i=0; i
    303. {
    304. stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
    305. stu[i].average=stu[i].sum/4.0;
    306. printf("%-10s%-8s%4d%5c%11s%7s%8.1f%8.1f%8.1f%7.1f%9.1f%9.1f\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,
    307. stu[i].object,stu[i].room,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,
    308. stu[i].average);
    309. }
    310. }
    311. system("pause");
    312. }
    313. void menu()/* 界面*/
    314. {
    315. int num;
    316. printf(" \n\n \n\n");
    317. printf(" ****************************************************** \n\n");
    318. printf(" * 学生信息管理系统 *\n \n");
    319. printf(" ****************************************************** \n\n");
    320. printf("*********************系统功能菜单************************* \n");
    321. printf(" ---------------------- ---------------------- \n");
    322. printf(" ********************************************* \n");
    323. printf(" * 0.系统帮助及说明 * * 1.刷新学生信息 * \n");
    324. printf(" ********************************************* \n");
    325. printf(" * 2.查询学生信息 * * 3.修改学生信息 * \n");
    326. printf(" ********************************************* \n");
    327. printf(" * 4.增加学生信息 * * 5.按学号删除信息 * \n");
    328. printf(" ********************************************* \n");
    329. printf(" * 6.显示当前信息 * * 7.保存当前学生信息* \n");
    330. printf(" ********************************************* \n");
    331. printf(" * 8.退出系统 * * 9.调取学生成绩文档* \n");
    332. printf(" ********************************************* \n");
    333. printf(" ---------------------- ---------------------- \n");
    334. printf("***********************欢迎使用*************************** \n");
    335. printf("请选择菜单编号:");
    336. scanf("%d",&num);
    337. switch(num) {
    338. case 0:
    339. help();
    340. break;
    341. case 1:
    342. refresh();
    343. break;
    344. case 2:
    345. seek();
    346. break;
    347. case 3:
    348. modify();
    349. break;
    350. case 4:
    351. insert();
    352. break;
    353. case 5:
    354. del();
    355. break;
    356. case 6:
    357. display();
    358. break;
    359. case 7:
    360. save();
    361. break;
    362. case 8:
    363. k=0;
    364. break;
    365. case 9:
    366. open();
    367. break;
    368. default:
    369. printf("请在0-9之间选择\n");
    370. }
    371. }
    372. void save() /*保存文件*/
    373. {
    374. FILE *fp; //文件指针
    375. int i;
    376. fp=fopen("E:\\201912971.txt","a"); /*以只在文件末尾写的方式打开文件*/
    377. for(i=0; i
    378. {
    379. stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
    380. stu[i].average=stu[i].sum/4.0;
    381. fprintf(fp,"%6s%8s%6d%5c%6s%5s%6.1f%6.1f%6.1f%6.1f%6.1f%6.1f\n",stu[i].code,stu[i].name,stu[i].age,
    382. stu[i].sex,stu[i].object,stu[i].room,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],
    383. stu[i].sum,stu[i].average);
    384. }
    385. fclose(fp);
    386. printf("已完成保存!");
    387. system("pause");
    388. }
    389. void refresh()/*更新文件*/
    390. {
    391. FILE *fp; //文件指针
    392. int i,a;
    393. printf("请输入需要刷新的学生个数:");
    394. scanf("%d",&a);
    395. fp=fopen("E:\\201912971.txt","r");
    396. //以只读方式打开文件
    397. for(i=0; i
    398. {
    399. stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
    400. stu[i].average=stu[i].sum/4.0;
    401. fscanf(fp,"%s %s %d %c %f %f %f %f %f %f\n",&stu[i].code,&stu[i].name,&stu[i].age,
    402. &stu[i].sex,&stu[i].object,&stu[i].room,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],
    403. &stu[i].score[3],&stu[i].sum,&stu[i].average);
    404. }
    405. fclose(fp);
    406. printf("学生学号 学生姓名 年龄 性别 专 业 班 级 C语言 数学 英语 军理 总成绩 平均分\n");
    407. for(i=0; i
    408. {
    409. stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];
    410. stu[i].average=stu[i].sum/4.0;
    411. printf("%-10s%-8s%4d%5c%11s%7s%8.1f%8.1f%8.1f%7.1f%9.1f%9.1f\n",stu[i].code,stu[i].name,stu[i].age,
    412. stu[i].sex,stu[i].object,stu[i].room,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],
    413. stu[i].sum,stu[i].average);
    414. }
    415. system("pause");
    416. }
    417. void open()/*打开文件*/
    418. {
    419. char buf[MAX_LINE]; /*缓冲区*/
    420. FILE *fp; /*文件指针*/
    421. int lengh; /*行字符个数*/
    422. if((fp = fopen("E:\\201912971.txt","r")) == NULL)
    423. {
    424. perror("fail to read");
    425. exit (1) ;
    426. }
    427. while(fgets(buf,MAX_LINE,fp) != NULL)
    428. {
    429. lengh = strlen(buf);
    430. buf[lengh-1] = '\0'; /*去掉换行符*/
    431. printf("%s \n",buf);
    432. }
    433. return;
    434. }

  • 相关阅读:
    软考系统架构设计师考试冲刺攻略
    微服务同时接入多个Kafka
    0_springboot_shiro_jwt_多端认证鉴权_前言
    怎样正确做 Web 应用的压力测试?
    javaScript 内存管理
    用SPM技术固定EBS标准功能的SQL执行计划
    Python网页开发神器fac 0.2.8、fuc 0.1.28新版本更新内容介绍
    【C】替换空格,宏实现整数的二进制奇偶位交换
    Mysql判断字段是否为NULL
    【线性表】
  • 原文地址:https://blog.csdn.net/m0_73931287/article/details/133395142