鱼C论坛

 找回密码
 立即注册
查看: 2486|回复: 10

[技术交流] 简单的学生管理系统

[复制链接]
发表于 2011-11-3 21:55:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
着是我利用C语言链表写的,写很久了但是在读取数据的时候有点问题,现在发出来让大家看看,到底是那里需要修改下
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <malloc.h>
  4. typedef struct stu
  5. {
  6. int num;
  7. char name[50];
  8. char sex[50];
  9. int score;
  10. struct stu *next;
  11. }student;
  12. int operate(void)//菜单
  13. {
  14. system("cls");
  15. printf("\t\t\t1录入新的学生成绩\n");
  16. printf("\t\t\t2删除学生成绩\n");
  17. printf("\t\t\t3修改学生成绩\n");
  18. printf("\t\t\t4查找学生成绩\n");
  19. printf("\t\t\t5显示所有学生信息\n");
  20. printf("\t\t\t0退出程序\n");
  21. printf("\t\t\t输入编号:");
  22. return 0;
  23. }
  24. student* input(student *p3)//输入
  25. {
  26. int a;
  27. int n=0;
  28. student *head,*p1,*p2,*p4;
  29. system("cls");
  30. p4=p3;
  31. while(p3!=NULL)
  32. {
  33. p2=p3;
  34. p3=p3->next;
  35. if(p3==NULL)
  36. {
  37. p1=(student *)malloc(sizeof(student));
  38. p2->next=p1;
  39. head=p4;
  40. goto l1;
  41. }
  42. }
  43. do{
  44. p1=(student *)malloc(sizeof(student));
  45. if(n==0)
  46. {
  47. head=p1;
  48. p2=p1;
  49. }
  50. l1:printf("学号:");
  51. scanf("%d",&p1->num);
  52. printf("姓名:");
  53. scanf("%s",p1->name);
  54. printf("性别男/女:");
  55. scanf("%s",p1->sex);
  56. do
  57. { printf("成绩(0-100):");
  58. scanf("%d",&p1->score);
  59. if(p1->score>100||p1->score<0)
  60. printf("输入错误请重新输入:\n");
  61. }while(p1->score>100||p1->score<0);

  62. do{
  63. printf("是否继续输入1/0:");
  64. scanf("%d",&a);
  65. if(a!=1&&a!=0)
  66. printf("输入错误请重新输入!\n");
  67. }while(a!=0&&a!=1);
  68. p2->next=p1;
  69. p2=p1;
  70. n++;
  71. }while(a==1);
  72. p2->next=NULL;
  73. return (head);
  74. }
  75. void prin(student *head)/*显示学生信息*/
  76. {
  77. int b;
  78. student *p;
  79. p=head;
  80. printf("\t\t学号\t\t姓名\t\t性别\t\t成绩\n");
  81. if(head!=NULL)
  82. do
  83. {
  84. printf("\t\t%d\t\t%s\t\t%s\t\t%d\n",p->num,p->name,p->sex,p->score);
  85. p=p->next;

  86. }while(p!=NULL);
  87. do{
  88. printf("1返回:");
  89. scanf("%d",&b);
  90. if(b!=1)
  91. printf("输入错误请重新输入\n");
  92. }while(b!=1);

  93. }
  94. int find(student *head)//查找学生信息
  95. {
  96. int a,b;
  97. student *p;
  98. do{
  99. do
  100. { p=head;
  101. printf("\t\t请输入要查找的学生学号:");
  102. scanf("%d",&a);
  103. while(p->num!=a)
  104. {
  105. p=p->next;
  106. if(p==NULL)
  107. {
  108. printf("\t\t没有找到该学生信息请重新输入\n");
  109. break;
  110. }
  111. }
  112. }while(p==NULL);

  113. printf("\t\t学号\t\t姓名\t\t性别\t\t成绩\n");
  114. printf("\t\t%d\t\t%s\t\t%s\t\t%d\n",p->num,p->name,p->sex,p->score);
  115. do{
  116. printf("是否继续查询1/0:");
  117. scanf("%d",&b);
  118. if(b!=0&&b!=1)
  119. printf("输入错误请重新输入\n");
  120. }while(b!=1&&b!=0);
  121. if(b==0)
  122. return 0;
  123. }while(b==1);
  124. return 0;
  125. }

  126. void alter(student *head)//修改学生信息
  127. {
  128. int a;
  129. student *p;
  130. do
  131. {
  132. p=head;
  133. printf("\t\t请输入要修改的学生学号:");
  134. scanf("%d",&a);
  135. while(p->num!=a)
  136. {
  137. p=p->next;
  138. if(p==NULL)
  139. {
  140. printf("\t\t没有找到该学生请重新输入\n");
  141. break;
  142. }
  143. }


  144. }while(p==NULL);

  145. printf("学号:");
  146. scanf("%d",&p->num);
  147. printf("姓名:");
  148. scanf("%s",p->name);
  149. printf("性别男/女:");
  150. scanf("%s",p->sex);
  151. do
  152. { printf("成绩(0-100):");
  153. scanf("%d",&p->score);
  154. if(p->score>100||p->score<0)
  155. printf("输入错误请重新输入:\n");
  156. }while(p->score>100||p->score<0);

  157. }
  158. student* omit(student *head)//删除学生信息
  159. {
  160. int a;
  161. student *p,*p1;

  162. do
  163. {

  164. p=head;
  165. printf("\t\t请输入要删除的学生学号:");
  166. scanf("%d",&a);
  167. while(p->num!=a)
  168. {
  169. p1=p;
  170. p=p->next;
  171. if(p==NULL)
  172. {
  173. printf("\t\t没有找到该学生,请重新输入\n");
  174. }
  175. }
  176. }while(p==NULL);
  177. if(p==head)
  178. head=p->next;
  179. else if(p->next==NULL)
  180. p1->next=NULL;
  181. else
  182. p1->next=p->next;
  183. free(p);
  184. return (head);
  185. }
  186. int save(FILE *fp,student *head)//向D盘写入数据
  187. {
  188. student *p;
  189. p=head;
  190. rewind(fp);
  191. while(p!=NULL)
  192. {
  193. if(p==NULL)
  194. break;
  195. fwrite(p,sizeof(student),1,fp);
  196. p=p->next;



  197. }
  198. return 0;
  199. }

  200. int main()
  201. {
  202. int a;
  203. FILE *fp;
  204. student *head=NULL,*p1,*p2;
  205. if((fp=fopen("d:\\student.dat","rb+"))==NULL)
  206. fp=fopen("d:\\student.dat","wb+");
  207. else
  208. {
  209. p1=(student *)malloc(sizeof(student) );
  210. fread(p1,sizeof(student),1,fp);
  211. head=p1;
  212. p2=p1;
  213. while((feof(fp))==NULL)
  214. {
  215. p1=(student *)malloc(sizeof(student) );
  216. fread(p1,sizeof(student),1,fp);
  217. p2->next=p1;
  218. if((feof(fp))==NULL)
  219. p1->next=NULL;
  220. p2=p1;

  221. }
  222. fclose(fp);
  223. }

  224. do
  225. {

  226. operate();//显示菜单
  227. do
  228. {
  229. scanf("%d",&a);
  230. if(a<0||a>6)
  231. printf("输入错误请重新输入:");

  232. }while(a<0||a>6);
  233. switch(a)
  234. {
  235. case 1:head=input(head);break;//新建学生信息
  236. case 2:head=omit(head);break;// 删除学生信息
  237. case 3:alter(head);break;//修改学生信息
  238. case 4:find(head);break;//查找学生信息
  239. case 5: prin(head);break;//显示全部学生信息
  240. default:break;
  241. }
  242. }while(a!=0);

  243. printf("数否保存文件到D盘1/0:");
  244. scanf("%d",&a);
  245. if(a==1)
  246. { fp=fopen("d:\\student.dat","wb+");
  247. save(fp,head);//保存数据到D盘
  248. fclose(fp);
  249. printf("\t\t\t本程序由H U C ls701110编写用于交流学习\n");
  250. return 0;
  251. }
  252. printf("\t\t\t本程序由H U C ls701110编写用于交流学习\n");
  253. return 0;

  254. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-11-3 21:57:22 | 显示全部楼层
自己顶一下,希望大家来讨论下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-10 16:19:55 | 显示全部楼层
支持下 LZ 继续加油哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-21 22:42:22 | 显示全部楼层
真是难得给力的帖子啊。我不得不顶了……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-8 21:43:34 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-11 18:12:14 | 显示全部楼层
灰常感谢楼主..............
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-11 18:44:12 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-5-22 22:52:26 | 显示全部楼层
强烈支持楼主ing……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-14 21:23:19 | 显示全部楼层
支持哈。。。。。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-9 18:13:10 | 显示全部楼层
shu chu cuo wu hui si xun huan,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-9 19:03:52 | 显示全部楼层
很给力,顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 01:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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