学生信息管理系统87809.docx
- 文档编号:7941338
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:27
- 大小:141.39KB
学生信息管理系统87809.docx
《学生信息管理系统87809.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统87809.docx(27页珍藏版)》请在冰豆网上搜索。
学生信息管理系统87809
一.设计目的:
课程设计内容:
1.问题描述
学生信息包括:
学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。
设计以学生信息管理系统,使之能提供以下功能:
(1).系统以菜单方式工作;
(2).学生信息录入功能(学生信息用文件保存)---输入;
(3).学生信息浏览功能---输出;
(4).查询,排序功能---算法:
a.按学号查询;
b.按姓名查询。
(5).学生信息的删除与修改。
2.功能要求
A.界面比较美观;
B.有一定的容错能力。
3.函数功能描述
⑴输入部分
通过键盘输入多位学生的学生信息。
学生的信息包含有:
学生姓名、性别、学号、出生年月、年龄等。
此次做的学生管理系统是利用链表而完成的程序,故第一部分想要实现建立链表
⑵、输出部分
输出当前已存储的学生信息
⑶、更新部分
①删除删除用户指定的学生信息,这部分的功能是输入学生的学号,找到其在链表中存储的结点处,并将这整个结点删除,再把该结点的前驱结点和后驱节点连接,来实现这个学生信息的删除.
②修改修改用户指定的学生信息,这部分是利用输入学生的学号,来找到存储该学生信息的结点,通过该结点的链域来修改其中的值域,来实现对学生信息的修改.
⑷、查询部分
①按名字查询输出用户查询的学生信息,这部分是利用输入学生的姓名,来找到存储该学生信息的结点,输出该结点的值域中的内容,来实现对学生信息的查询功能.
②按学号查询输出用户查询的学生信息,同上,只是查询条件为学号.
4.要求与限制条件
①.各模块间通过菜单切换和调用
②.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。
③.程序能够保证各模块功能的独立和数据共享。
不使用全局变量则能保证函数之间的独立性,利用形参与实参之间的数值传递来实现数据共享。
二.总体设计:
查找
修改
三.详细设计:
输入模块
voidinsert()/*插入函数*/
{
inti=n,j,flag;
printf("请输入待增加的学生数:
\n");
scanf("%d",&m);
do
{
flag=1;
while(flag)
{
flag=0;
printf("请输入第%d个学生的学号:
\n",i+1);
scanf("%s",stu[i].code);
for(j=0;j
if(strcmp(stu[i].code,stu[j].code)==0)
{
printf("已有该学号,请检查后重新录入!
\n");
flag=1;
break;/*如有重复立即退出该层循环,提高判断速度*/
}
}
printf("请输入第%d个学生的姓名:
\n",i+1);
scanf("%s",stu[i].name);
printf("请输入第%d个学生的年龄:
\n",i+1);
scanf("%d",&stu[i].age);
printf("请输入第%d个学生的性别:
\n",i+1);
scanf("%s",stu[i].sex);
printf("请输入第%d个学生的出生年月:
(格式:
年.月)\n",i+1);
scanf("%s",stu[i].time);
printf("请输入第%d个学生的地址:
\n",i+1);
scanf("%s",stu[i].add);
printf("请输入第%d个学生的电话:
\n",i+1);
scanf("%s",stu[i].tel);
printf("请输入第%d个学生的E-mail:
\n",i+1);
scanf("%s",stu[i].mail);
if(flag==0)
{
i=i;
i++;
}
}
while(i n+=m; printf("录入完毕! \n\n"); sort(); } 查找模块 voidseek()/*查找*/ { inti,item,flag; chars1[21];/*以姓名和学号最长长度+1为准*/ printf("------------------\n"); printf("-----1.按学号查询-----\n"); printf("-----2.按姓名查询-----\n"); printf("-----3.退出本菜单-----\n"); printf("------------------\n"); while (1) { printf("请选择子菜单编号: "); scanf("%d",&item); flag=0; switch(item) { case1: printf("请输入要查询的学生的学号: \n"); scanf("%s",s1); for(i=0;i if(strcmp(stu[i].code,s1)==0) { flag=1; printf("学生学号学生姓名年龄性别出生年月地址电话E-mail\n"); printf("--------------------------------------------------------------------\n"); printf("%6s%7s%6d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age, stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } if(flag==0) printf("该学号不存在! \n");break; case2: printf("请输入要查询的学生的姓名: \n"); scanf("%s",s1); for(i=0;i if(strcmp(stu[i].name,s1)==0) { flag=1; printf("学生学号学生姓名年龄性别出生年月地址电话E-mail\n"); printf("--------------------------------------------------------------------\n"); printf("%6s%7s%6d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age, stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } if(flag==0) printf("该姓名不存在! \n");break; case3: return; default: printf("请在1-3之间选择\n"); } } } 修改模块 voidmodify()/*修改信息*/ { inti,item,num; charsex1[3],s1[LEN+1],s2[LEN+1];/*以姓名和学号最长长度+1为准*/ printf("请输入要要修改的学生的学号: \n"); scanf("%s",s1); for(i=0;i if(strcmp(stu[i].code,s1)==0)/*比较字符串是否相等*/ num=i; printf("------------------\n"); printf("1.修改姓名\n"); printf("2.修改年龄\n"); printf("3.修改性别\n"); printf("4.修改出生年月\n"); printf("5.修改地址\n"); printf("6.修改电话号码\n"); printf("7.修改E-mail地址\n"); printf("8.退出本菜单\n"); printf("------------------\n"); while (1) { printf("请选择子菜单编号: "); scanf("%d",&item); switch(item) { case1: printf("请输入新的姓名: \n"); scanf("%s",s2); strcpy(stu[num].name,s2);break; case2: printf("请输入新的年龄: \n"); scanf("%d",&stu[num].age);break; case3: printf("请输入新的性别: \n"); scanf("%s",sex1); strcpy(stu[num].sex,sex1);break; case4: printf("请输入新的出生年月: \n"); scanf("%s",s2); strcpy(stu[num].time,s2);break; case5: printf("请输入新的地址: \n"); scanf("%s",s2); strcpy(stu[num].add,s2);break; case6: printf("请输入新的电话号码: \n"); scanf("%s",s2); strcpy(stu[num].tel,s2);break; case7: printf("请输入新的E-mail地址: \n"); scanf("%s",s2); strcpy(stu[num].mail,s2);break; case8: return; default: printf("请在1-8之间选择\n"); } } } 四.调试: A先编译程序 B再连接程序生成目标 C运行程序 1调试中的主要问题 调试中主要出现的问题: ⑴经常遇到程序执行到某部分就不运行,而编译和链接都成功,说明程序设计上有些问题,语法等并未出错,这时就要去再行考虑设计的程序哪部分考虑不周全。 ⑵因为这次使用链表来设计程序,就牵扯到形参和实参的问题。 曾经因为考虑不周全,在自定义函数前的基类出错,导致相关的值未改变,这里就要考虑好形参和实参的问题。 刚开始没有那个初始化函数,程序运行后没有输入任何数据就试得去执行显示功能,结果显示的是一些乱码! 加入初始化函数后,这种现象也随之消失。 在没有输入任何信息的情况下,不能执行查询、修改、删除、统计、排序功能。 有时候,忘记定义就直接调用,使得出错。 我这时候才真正体会到了一致性的重要。 检查程序很多遍但却始终不知道输入的数据有错,很令人头疼。 2程序的不足和改进之处 因为用链表来设计一个程序,较复杂,最后没来得及,设计相关的文件存储来实现将数据保存,以致每次运行程序都要重新输入新的数据 改进之处: 可以再考虑编写一个函数,这个函数的功能是将数据写入文件中并保存。 五.测试结果: 程序运行: 主界面: 输入信息 显示 查询 修改 删除 六.结束语: 回想学习C语言的过程中,既有快乐又有烦恼。 从领到书的那一刻,我就很郁闷,C语言到底事学什么的,有什么用。 刚开始上课时,还在迷茫这门课程是用来做什么的。 不过,这些感受都是在对这门课程不了解的情况下产生的。 后来慢慢的接触多了,听老师讲的多了,了解多了,渐渐的产生了兴趣。 尤其是学到语句和函数时,上机操作程序,经过编译,调试和运行后,出现界面,当时觉得很好奇,想真正的学好这门课程。 通过一个学期的学习,我掌握了基本知识。 期末,被通知要进行课程设计。 当时有点懵,感觉学的东西很少,很零散,不知该怎么练到一起,就要课程设计,是不是太难为我们了。 通过两周的自学,第二周结束的时候,我感觉自己收获挺大的,从一开始的迷茫,不知道从何下手到把程序中的几个模块编写出来,心里挺开心的。 但是,我们又不得不再次陷入困境。 在整个程序的编写过程中。 最难的就是修改和删除这两个模块,这也是我们要解决的重点问题。 开始编写修改和删除时,很头疼,去向其他人寻求帮助,在别人的帮助和提示下,我编完了修改程序,但编译时老出错,修改后的内容将文本内的信息全部覆盖了。 困难之时,我们组的其他人,帮助了我,完成了修改和删除。 这样的话,整个程序基本上全部完成了,就剩下完善工作了。 我们组写了两个程序,最后,两个程序相互组合,互补,大功告成 虽然设计时完成了,但是我觉得其中还是由一些不足之处: 1.警告句。 程序中缺少一些警告句,例如: “是否真的删除(y/n)? ”。 2.重名的情况。 由于考虑的不周全,没有设计遇到重名的情况该怎么处理。 整个程序完成了,还有很多不完善的地方,希望自己以后办事的时候要认真,仔细,考虑周全。 短短的几周课程设计结束了,但是这段时间里,我又学到了更多C知识,如: 对象数组,string类,文件流等,同时我也被提醒以后办事的时候要认真,仔细,考虑周全。 ,也看到了团队精神和互帮互助的重要性。 这一点会让我终生受益。 通过这次的课程设计,我觉得自己肚子里的墨水多了,收获也挺大的,这几周过的挺充实! 七.源程序清单: #include #include #include #defineBUFLEN100/*缓冲区最大字符数*/ #defineLEN15/*学号和姓名最大字符数,实际请更改*/ #defineN100/*最大学生人数,实际请更改*/ structrecord/*结构体*/ { charcode[LEN+1];/*学号*/ charname[LEN+1];/*姓名*/ intage;/*年龄*/ charsex[3];/*性别*/ chartime[LEN+1];/*出生年月*/ charadd[30];/*家庭地址*/ chartel[LEN+1];/*电话号码*/ charmail[30];/*电子邮件地址*/ }stu[N]; intk=1,n,m;/*定义全局变量*/ voidreadfile();/*声明函数*/ voidseek(); voidmodify(); voidinsert(); voiddel(); voiddisplay(); voidsave(); voidmenu(); intmain() { while(k) menu(); system("pause"); return0; } voidhelp()/*帮助*/ { printf("\n1.欢迎使用系统帮助! \n"); printf("\n2.进入系统后,先刷新学生信息,再查询;\n"); printf("\n3.按照菜单提示键入数字代号;\n"); printf("\n4.增加学生信息后,切记保存按8;\n"); printf("\n5.谢谢您的使用! \n"); } voidreadfile()/*建立信息*/ { char*p="student.txt"; FILE*fp; inti=0; if((fp=fopen("student.txt","r"))==NULL) { printf("Openfile%serror! Strikeanykeytoexit! ",p); system("pause"); exit(0); } while(fscanf(fp,"%s%s%d%s%s%s%s%s",stu[i].code,stu[i].name,&stu[i].age, stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8) { i++; i=i; } fclose(fp); n=i; printf("录入完毕! \n"); } voidseek()/*查找*/ { inti,item,flag; chars1[21];/*以姓名和学号最长长度+1为准*/ printf("------------------\n"); printf("-----1.按学号查询-----\n"); printf("-----2.按姓名查询-----\n"); printf("-----3.退出本菜单-----\n"); printf("------------------\n"); while (1) { printf("请选择子菜单编号: "); scanf("%d",&item); flag=0; switch(item) { case1: printf("请输入要查询的学生的学号: \n"); scanf("%s",s1); for(i=0;i if(strcmp(stu[i].code,s1)==0) { flag=1; printf("学生学号学生姓名年龄性别出生年月地址电话E-mail\n"); printf("--------------------------------------------------------------------\n"); printf("%6s%7s%6d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age, stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } if(flag==0) printf("该学号不存在! \n");break; case2: printf("请输入要查询的学生的姓名: \n"); scanf("%s",s1); for(i=0;i if(strcmp(stu[i].name,s1)==0) { flag=1; printf("学生学号学生姓名年龄性别出生年月地址电话E-mail\n"); printf("--------------------------------------------------------------------\n"); printf("%6s%7s%6d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age, stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail); } if(flag==0) printf("该姓名不存在! \n");break; case3: return; default: printf("请在1-3之间选择\n"); } } } voidmodify()/*修改信息*/ { inti,item,num; charsex1[3],s1[LEN+1],s2[LEN+1];/*以姓名和学号最长长度+1为准*/ printf("请输入要要修改的学生的学号: \n"); scanf("%s",s1); for(i=0;i if(strcmp(stu[i].code,s1)==0)/*比较字符串是否相等*/ num=i; printf("------------------\n"); printf("1.修改姓名\n"); printf("2.修改年龄\n"); printf("3.修改性别\n"); printf("4.修改出生年月\n"); printf("5.修改地址\n"); printf("6.修改电话号码\n"); printf("7.修改E-mail地址\n"); printf("8.退出本菜单\n"); printf("------------------\n"); while (1) { printf("请选择子菜单编号: "); scanf("%d",&item); switch(item) { case1: printf("请输入新的姓名: \n"); scanf("%s",s2); strcpy(stu[num].name,s2);break; case2: printf("请输入新的年龄: \n"); scanf("%d",&stu[num].age);break; case3: printf("请输入新的性别: \n"); scanf("%s",sex1); strcpy(stu[num].sex,sex1);break; case4: printf("请输入新的出生年月: \n"); scanf("%s",s2); strcpy(stu[num].time,s2);break; case5: printf("请输入新的地址: \n"); scanf("%s",s2); strcpy(stu[num].add,s2);break; case6: printf("请输入新的电话号码: \n"); scanf("%s",s2); strcpy(stu[num].tel,s2);break; case7: printf("请输入新的E-mail地址: \n"); scanf("%s",s2); strcpy(stu[num].mail,s2);break; case8: return; default: printf("请在1-8之间选择\n"); } } } voidsort()/*按学号排序*/ { inti,j,*p,*q,s; chartemp[10]; for(i=0;i { for(j=n-1;j>i;j--) if(strcmp(stu[j-1].code,stu[j].code)>0) { strcpy(temp,stu[j-1].code); strcpy(stu[j-1].code,stu[j].code); strcpy(stu[j].code,temp); strcpy(temp,stu[j-1].name); strcpy(stu[j-1].name,stu[j].name); strcpy(stu[j].name,temp); strcpy(temp,stu[j-1].sex); strcpy(stu[j-1].sex,stu[j].sex); strcpy(stu[j].sex,temp); strcpy(temp,stu[j-1].time); strcpy(stu[j-1].time,stu[j].time); strcpy(stu[j].time,temp); strcpy(temp,stu[j-1].add); strcpy(stu[j-1].add,stu[j].add); strcpy(stu[j].add,temp); strcpy(temp,stu[j-1].tel); strcpy(stu[j-1].tel,stu[j].tel); strcpy(stu[j].tel,temp); strcpy(temp,stu[j-1].mail); strcpy(stu[j-1].mail
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 信息管理 系统 87809