发个百分贴,在此求助各位,希望有人可以帮帮我,谢谢
我刚刚学c语言不久,本人自我感觉不是太能干得那种,因此学习起来感觉很是吃力啊,不过呢,还好到现在还可以坚持,呵呵,好不容易终于可以编写自己的第一个学生信息管理系统程序啦,但是能力有限对于链表的运用不是太熟练,写的程序很丑,我至此还没能够完全写完,希望各位可以给点指点,若果可以的话给写个示例程序,我学习下,谢谢,如果占用各位时间的话,可以指点一下也好。对于评论帖子的各位也表示感谢啦,大家重在参与嘛我要实现的功能是:
第一:键盘输入和文件输入学生信息
第二:保存这些信息
第三:通过排序(学号,姓名,分数都可以)然后输出
排序输出是重中之中我跟人觉得,就是这里还写不好
如下:
110 uimg 50
119 haid 60
103 huid 90
储存之后学号排序后输出:
103 huid 90
110 uimg 50
119 haid 60
希望各位可以给予指点和帮助 谢谢啦
这是我写的很丑的程序,各位见谅啦,我没能实现排序输出:
请批评指教 谢谢
程序代码:
#include<stdio.h> #include<stdlib.h> int N; void homepage(); void into(); void lists(); void outputtypes(); struct student * head; struct student { int num; char name[20]; int grade; struct student * next; }; void keyboards()//录入学生信息子函数(从键盘录入具有报重提示) { struct student *p1,*p2; N=0; p1=p2=(struct student *)malloc(sizeof(struct student)); printf("学生学号\t学生姓名\t学生成绩\n"); scanf("%d %s %d",&p1->num,p1->name,&p1->grade); while(p1->num!=0) { N=N+1; if(N==1)head=p1; else p2->next=p1; p2=p1; p1=(struct student * )malloc(sizeof(struct student)); scanf("%d %s %d",&p1->num,p1->name,&p1->grade); if(p1->num==p2->num) { printf("\n\n\t当前输入学号与前面重复,请检查后重新输入!\n\n"); p1=(struct student * )malloc(sizeof(struct student)); scanf("%d %s %d",&p1->num,p1->name,&p1->grade); } } p2->next=NULL; system("cls"); into(); } void files()//录入学生信息子函数(从文件录入) { int i=0; FILE * fp; char filepath[20]; struct student *p1,*p2; N=0; printf("输入要读入的文件路径:"); getchar(); gets(filepath); if((fp=fopen(filepath,"r"))==NULL) { printf("找不到%s文件!\n",filepath); exit(0); } p1=p2=(struct student*)malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); head=NULL; while(!feof(fp)) { i=0; N=N+1; if(N==1)head=p1; else p2->next=p1; p2=p1; p1=(struct student * )malloc(sizeof(struct student)); fread(p1,sizeof(struct student),1,fp); } p2->next=NULL; system("cls"); lists(); printf("\n\n"); } void inputs()//录入学生信息主函数 { int i; printf("\t\t\t录入学生信息\n"); printf("\n1.从键盘录入\n"); printf("2.从文件录入\n"); printf("3.返回主菜单\n"); printf("请选择(1~3):\n"); scanf("%d",&i); switch(i) { case(1):system("cls");keyboards();break; case(2):files();break; case(3):system("cls");break; } } void inserts(struct student * incouse)//学生信息管理子函数(添加学生信息) { struct student *p0,*p1,*p2; p1=head; p0=incouse; if(head==NULL) { head=p0; p0->next=NULL; } else { while((p0->num > p1->num) && (p1->next!=NULL)) { p2=p1; p1=p1->next; } if(p0->num <= p1->num) { if(head==p1) head=p0; else p2->next=p0; p0->next=p1; } else { p1->next=p0; p0->next=NULL; } } N=N+1; system("cls"); printf("\t\t\t\t…………学生信息已经保存………\n"); homepage(); } void dels(int num)//学生信息管理子函数(删除学生信息) { struct student *p1,*p2; int i; if(head==NULL) { printf("\n没有该学生信息,无法删除!\n"); goto end; } p1=head; while(num!=p1->num && p1->next!=NULL) { p2=p1; p1=p1->next; } if(num==p1->num) { if(p1==head) head=p1->next; else p2->next=p1->next; N=N-1; system("cls"); printf("\t\t\t\t…………学生信息已经删除………\n"); printf("\t\t\t\t…………此信息为当前信息………\n"); lists(); } else { printf("无该学号的学生!\n"); printf("请你再次确认!\n\n"); scanf("%d",&i); dels(i); } end:; } void managements()//学生信息管理主函数 { struct student * incouse; int i,num; printf("\t\t\t学生信息管理\n"); printf("1.新增学生信息\n"); printf("2.删除学生信息\n"); printf("3.返回主菜单\n"); printf("请选择(1~3):\n"); scanf("%d",&i); switch(i) { case(1): { incouse=(struct student *)malloc(sizeof(struct student)); printf("学生学号\t学生姓名\t学生成绩\n"); scanf("%d %s %d",&incouse->num,incouse->name,&incouse->grade); inserts(incouse); break; } case(2): { printf("请输入要删除学生的学号:\n"); scanf("%d",&num); dels(num); break; } case(3):system("cls");break; } } void lists()//输出学生信息 { struct student * p; p=head; printf("学生学号 学生姓名 学生成绩\n"); while(p!=NULL) { printf("%-4d %10s %10d\n",p->num,p->name,p->grade); p=p->next; } printf("\n\n\n"); homepage(); } void intos()//存储学生信息 { FILE * fp; struct student * p; char filepath[30]; printf("输入学生信息要保存的文件路径:"); getchar(); gets(filepath); if((fp=fopen(filepath,"w"))==NULL) { printf("\n保存失败!"); exit(0); } p=head; while(p!=NULL) { fwrite(p,sizeof(struct student),1,fp); p=p->next; } fclose(fp); system("cls"); printf("\n\n"); printf("\t\t\t学生信息已保存在%s中!\n\n\n",filepath); homepage(); } void into()//存储信息 { int i; printf("1.存储学生信息\n"); printf("2.返回主菜单\n"); printf("请输入(1~2)\n"); scanf("%d",&i); switch(i) { case(1):intos();break; case(2):system("cls");break; } } void store()//信息主函数用于查看和储存学生信息 { int i; printf("\t\t系统信息查看及存储\n"); printf("1.查看学生信息\n"); printf("2.存储信息\n"); printf("3.返回主菜单\n"); printf("请输入(1~3):\n"); scanf("%d",&i); switch(i) { case(1): system("cls"); //outputtypes(); lists(); homepage(); break; case(2):into();break; case(3):system("cls");break; } } void homepage() { int i; printf("\t友情提示:输入(1):\n"); printf("\t返回主菜单\n"); scanf("%d",&i); if(i<1 || i>2) { printf("输入错误,请重输:\n"); } switch(i) { case(1): { system("cls"); break; } } } int main()//主函数 { int i,j; while(1) { printf("\n\t请输入密码进行验证登陆:\n"); printf("\t\t"); scanf("%d",&j); if(j==123) break; else { printf("你输入的密码有误,请重新输入!\n"); scanf("%d",&j); system("cls"); } } system("cls"); start: printf("\n\t\t\t欢迎使用学生信息管理系统!\n"); printf("菜单:\n"); printf("1.录入学生信息\n"); printf("2.学生信息管理\n"); printf("3.系统信息查看及存储\n"); printf("4.退出系统\n"); printf("\n请输入菜单选项(1~4):\n"); scanf("%d",&i); if(i<1 || i>4) { printf("输入错误,请重输:\n"); goto start; } switch(i) { case(1): { system("cls"); inputs(); goto start; break; } case(2): { system("cls"); managements(); goto start; break; } case(3): { system("cls"); store(); goto start; break; } case(4): { system("cls"); printf("\n\n\t\t\t感谢使用本系统!\n\n\t\t\t再见!\n\n\n\n\n\n"); } } return(0); }