c语言课程设计学生信息管理系统.docx
- 文档编号:7008544
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:14
- 大小:163.74KB
c语言课程设计学生信息管理系统.docx
《c语言课程设计学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计学生信息管理系统.docx(14页珍藏版)》请在冰豆网上搜索。
c语言课程设计学生信息管理系统
C语言课程设计报告
课题——学生信息管理系统
学生信息管理系统
一.设计目的
熟练掌握C语言课程中所学的理论知识;C语言是在国内外广泛使用的一种计算机语言。
它既有高级语言的特点,又具有汇编语言的特点。
它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛。
学习使用C语言程序的目的是掌握程序设计的思路,学会用计算机语言编写程序正确处理算法和语法的关系算法是程序的核心、是灵魂,语法是外壳、是工具。
通过课程设计,我们要熟练的掌握C语言的算法、语言、函数的调用、循环的使用、数组的运用等。
二.设计要求
(一)。
信息描述
输入一个班学生的学号和每个学生的各项信息包括(学号、姓名、性别、出生、地址、电话、E-mail)。
编程出每个学生的信息,最后打印一张班上学生的各项信息。
1)各项信息输入用循环语句。
2)打印的学生信息表项包括:
学号、姓名、性别、出生、地址、电话、E-mail。
3)按实验报告电子模板格式填写实验内容。
(二)。
功能描述
1.学生基本信息录入。
2.学号、姓名、性别、出生、地址、电话、E-mail。
3.基本信息的查询(学号,姓名)。
4.修改学生信息。
5.增加学生信息。
6.按学号删除信息
7.保存当前学生信息
8.退出
三.总体设计
10.调用
Exit
函数
四.详细设计
1.main()主函数
程序采用模块化设计,主函数是程序的入口,各模块独立,可分块调试,均由主函数控制调用。
控制功能的实现通过循环执行一个开关语句,该语句的条件值是通过调用主菜单函数得到的返回值,根据该值,调用相应的各功能函数,同时设计一个断点,即当返回值为一定条件时
2.del()删除记录
输入要删除记录的姓名,调用find函数,如果没有该记录,显示没找到信息;否则,调用print函数,显示记录信息,接着显示是否确实要删除,请输入确认信息整数0或1,1表示是,0表示否。
如果输入了1,则系统删除信息。
要删除数组中的某一条元素,实际所做的操作是将其后继记录依次前移一条,所以删除第i条记录,用for语句,从i+l开始,依次将每个字段拷贝到前一条记录的相应字段,即覆盖了前一条记录,达到前移的目的,直到最后一条记录。
注意前移记录的时候是逐个字段赋值,不能一个记录整体赋值。
由于删除了一条记录,记录数减1,返回记录数,程序结束。
结束
运行exit()函数结束程序,以免造成死循环。
返回菜单
3.insert()插入记录
输入要插入记录的信息,保存到临时变量temp中,然后再输入一个姓名,用字符串s表示,确定新记录插入在该记录之前,调用find()函数查找姓名为s的记录,得到该记录所在的序号,从最后一条记录开始,向后移动,即第n-1条移动到第n条,第n-2条移动到第n-1条,直到第i条移动到第i+l条,将新信息存入到第i条记录位置。
4.seek()查找记录
查找指定姓名的记录,采用顺序查找法。
首先输入要查找记录的姓名,然后顺序查找结点,如果没找到,则输出没找到信息,否则,显示找到的记录信息。
因为程序多次用到了查找和显示记录,例如删除记录中,所以编写了一个find()函数,专门进行查找。
从第一条记录开始,将记录中的姓名字段和待比较的姓名字符串s进行比较,一旦相等,程序结束,返回该记录的下标号i,也就是记录所在的序号;如果不相等,则继续下一条比较,所有记录比较完毕,循环结束,返回此时的下标变量i值。
search()函数通过调用find()得到了整数i,判断i的值如果大于n-1,已超过实际记录数,说明所有记录都进行过比较,没有找到,查找不成功:
否则,说明找到,调用输出函数print(),显示该第i条记录。
输入要查询学生号码
输出学生学号
输出学生姓名
while
(1)
printf("请选择子菜单编号:
");
scanf("%d",&item);
按3返回菜单
5.while().switch()for()循环
while()for都是循环语句,使用格式:
while(条件表达式)
for(表达式1;表达式2;表达式3)
2、switch是多分支选择语句,case是switch语句中的一个关键字,用来判断从哪个位置开始执行语句。
格式:
switch(表达式)
{case常量表达式:
.....
case常量表达式:
.....
case常量表达式:
....
default:
....
switch语句结束的条件:
碰到break语句,或执行到}
五.调试分析
经过我一天的调试,我们终于把各自的模块整合起来了,在这过程中,我们遇到了很多问题,像数据不匹配,括号不配对,赋值重复等。
因为C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等原因。
但经过我的努力,终于完成了。
首先,我们用WHILE循环,使这个图书系统能无限使用,再次,我们用SWITCH对各个模块功能进行了组合,使学生成绩管理系统的功能更完善,界面更清晰、明了。
六.总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
总的来说,本次课程设计,实在是受益匪浅。
本来这门课的知识学的就不够扎实,当刚开始要设计的时候,还真不知道从哪里下手,结果第一天的上机,我只是做了一个下午,什么也没干!
回去以后,我想,这样不行,这样下去还得了!
后来我们这组的组长把整个程序的各个模块都分配好任务,我主要负责查找那一个模块的。
第二天因为有了确实的任务,所以我就静下心来去编程,首先想到的是如何定义类型,想用数组的话很麻烦,我们也只学了这么多内容,后来组长说如果用结构体的话就比较方便,所以我们就决定自己在学一下结构体那方面的知识。
我选用了顺序查找法编写了查找函数,并且通过编写使该程序可以进行多次查找,界面友好,并且输出的画面美观。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,例如编写的程序在计算机上识别的是没有错误的,但是运行的结果确实不对的,总是两个字符串一起输出,怎么看我的源程序都没有错误,后来经过老师的指导才知道字符串输出是以回车键识别结束语句的,解决的办法是在输出语句中间加一个输入字符语句;后来在我们团队的合作下,一一攻破了困难,最后把一个完整的程序设计完成,感觉特别有成就感的。
虽然课程设计只有短短的几天,但是我发现我学到的知识比整整一个学期学到的都多。
理论和实践的相结合是学习最有效的方法。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
七.程序代码
C程序学生信息系统管理设计
#include
#include
#include
#defineBUFLEN100/*缓冲区最大字符数*/
#defineLEN20/*学号和姓名最大字符数,实际请更改*/
#defineN84/*最大学生人数,实际请更改*/
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()/*定义主函数为整型*/
{system("color2E");/*背景颜色变化*/
while(k)
menu();
system("pause");/*系统终止*/
return0;
}
voidreadfile()/*建立信息*/
{
charbuf[BUFLEN],*p="student.dat";/*文件存入指针变量*/
FILE*fp;/*打开指针文件*/
inti=0;
if((fp=fopen("student.dat","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,j,item,flag;
chars1[20];/*以姓名和学号最长为20*/
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("%s%s%d%s%s%s%s%s\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("该学生学号: %s姓名: %s年龄: 性别: %s出生年月: %s地址: %s电话: %sE-mail: %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); } if(flag==0)/*为假....没有输入该学生的学号*/ printf("该姓名不存在! \n");break; case3: return; default: printf("请在1-3之间选择\n"); } } } voidmodify()/*修改信息*/ {inti,j,item,num; charsex1[3],s1[LEN+1],s2[LEN+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"); } } } 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"); } voiddel()/*删除*/ {inti,j,flag=0; chars1[LEN+1]; printf("请输入要删除学生的学号: \n"); scanf("%s",s1); for(i=0;i if(strcmp(stu[i].code,s1)==0) {flag=1; for(j=i;j stu[j]=stu[j+1]; } if(flag==0) printf("该学号不存在! \n"); if(flag==1) {printf("删除成功,显示结果请选择菜单6\n"); n--; } } voiddisplay()/*显示*/ {inti,j; printf("所有学生的信息为: \n"); for(i=0;i { printf("%s%s%d%s%s%s%s%s\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); } } voidsave()/*储存*/ {inti,j,k,flag=0; FILE*fp;/*打开指针文件*/ fp=fopen("student.dat","w"); for(i=0;i {fprintf(fp,"%s%s%d%s%s%s%s%s\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); } fclose(fp);/*关闭*/ } voidmenu()/*界面*/ {intnum; printf("\n\n\n东华理工大学学生信息管理系统\n\n");/*\N\N换行*/ printf("********************系统功能菜单********************\n"); printf("*----------------------------------------------------*\n"); printf("*1.东华理工读入学生信息*\n"); printf("*2.东华理工查询学生信息*\n"); printf("*3.东华理工修改学生信息*\n"); printf("*4.东华理工增加学生信息*\n"); printf("*5.东华理工按学号删除信息*\n"); printf("*6.东华理工显示当前信息*\n"); printf("*7.东华理工保存当前学生信息*\n"); printf("*8.退出系统*\n"); printf("*----------------------------------------------------*\n"); printf("请选择菜单编号: "); scanf("%d",&num); switch(num) { case1: readfile();break;/*函数声明*/ case2: seek();break;/*搜索*/ case3: modify();break;/*更改*/ case4: insert();break;/*插入*/ case5: del();break;/*删除*/ case6: display();break;/*显示*/ case7: save();break;/*储存*/ case8: k=0;break; default: printf("请在1-8之间选择\n");/*错误后输出*/ } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 学生 信息管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)