C语言学生信息管理系统.docx
- 文档编号:27425392
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:20
- 大小:34.17KB
C语言学生信息管理系统.docx
《C语言学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言学生信息管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
C语言学生信息管理系统
C语言学生信息管理系统
C语言课程设计
题目名称:
学生信息管理系统
姓名XXX
学号XXXXXXXX
专业网络工程
班级一班
指导教师XXX
编写日期2011/6/6
目
录
1、序言
随着学校的规模不断过大,学生数量急剧增加,有关学生的各种信息量也成倍增加。
面对庞大的信息量需要有学生信息管理系统来提高学生管理工作的效率。
通过这样的系统可以做到信息的规范化管理、科学性统计和快速查询、修改、增加、删除等,从而减少管理方面的工作量。
2、需求分析
本系统主要需要解决的任务是实现学生信息关系的系统化、规范化和自动化,其主要目的是计算学生各种信息进行日常管理,如查询、修改、增加删除学生信息等。
在实现程序功能的同时应该做到界面简单易懂,容易操作,方便使用的要求。
并且程序需要有一定的纠错能力。
本系统主要应用于学生学籍管理、信息查询等部分,具有不同的操作功能。
具体功能如下:
有关学生信息的录入,学生信息包括输入学生的学号,姓名,年龄,性别,出生年月,,,E-mail等(学生信息用文件保存)。
.学生信息的浏览功能。
.学生信息的查询功能,其中实现按学号和姓名二种方式查询。
.学生信息的修改功能,包括增加、删除等。
3、总体设计
首先,考虑信息的录入,一个学生包括这么多的属性,应该考虑定义一个结构体。
其次,我们应该考虑数据的存储形式,在这里我们用一个数组。
从文件中录入我们首先要定义一个文件指针,打开该文件后通过一个循环来读文件,将所有信息读出来后关闭文件。
对于菜单的实现,首先用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。
信息的浏览,我们只需要通过一个循环将结构体中所有元素输出就行了。
信息的查询,我们选择用switch结构来解决用学号和姓名二种方式来查询的要求。
等输入学号或者姓名的时候,通过字符串比较函数,如果存在,那么输出学生信息,否则提示错误并要求重新输入。
信息的修改,输入要修改信息的学号。
首先用字符串比较函数判断改学生信息是否存在,如果存在,同过switch语句来依次修改学生的各项信息。
修改信息我们需要用字符串复制函数。
增加新学生信息,输入要增加的学号。
首先用字符串比较函数判断,如果输入的学号已经存在,则提示重新输入,否则依次输入各项信息。
删除学生信息,通过比较找到要删除的学号,用后一个学生的信息直接赋值,后面的依次赋值给前一个学生的信息。
4、详细设计
.主界面函数
voidmenu()
{intnum;
printf("简易学生通讯录系统\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:
input();break;
case2:
inquir();break;
case3:
modify();break;
case4:
increase();break;
case5:
del();break;
case6:
output();break;
case7:
save();break;
case8:
k=0;break;
default:
printf("请在1-8之间选择\n");
}
}
说明:
此函数的功能是输出主界面功能菜单,已供选择相应的模块进行操作。
其中定义一个变量num,通过输入num的值来进入相应的功能,switch提供了不同选择的入口。
在结束相应功能的操作后又返回主界面,并且对错误的输入有一定的纠错能力。
.输入函数
voidinput()
{
FILE*fp;
inti=0;
if((fp=fopen("student.dat","r"))==NULL)
{printf("Openfilestudentdent.daterror!
Strikeanykeytoexit!
");
exit(0);
}
while(fscanf(fp,"%s%s%d%s%s%s%s%s",student[i].number,student[i].name,&student[i].age,
student[i].sex,student[i].time,student[i].add,student[i].tel,student[i].email)==8)
{
i++;
}
fclose(fp);
n=i;
printf("录入完毕!
\n");
}
说明:
此函数的功能是从文件中录入信息。
首先定义了一个文件指针fp,用他来打开文件student.dat(事先已经储存),通过while循环录入信息,最后关闭文件。
显示录入信息成功!
.查询函数
voidinquir()
{inti,j,item,flag;
chars1[LEN];
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(student[i].number,s1)==0) {flag=1; printf("该学生学号,姓名,年龄,性别,出生年月,,,E-email分别为: \n"); printf("%s%s%d%s%s%s%s%s\n",student[i].number,student[i].name,student[i].age, student[i].sex,student[i].time,student[i].add,student[i].tel,student[i].email); } if(flag==0) printf("该学号不存在! \n"); break; case2: printf("请输入要查询的学生的姓名: \n"); scanf("%s",s1); for(i=0;i if(strcmp(student[i].name,s1)==0) {flag=1; printf("该学生学号,姓名,年龄,性别,出生年月,,,E-email分别为: \n"); printf("%s%s%d%s%s%s%s%s\n",student[i].number,student[i].name,student[i].age, student[i].sex,student[i].time,student[i].add,student[i].tel,student[i].email); } if(flag==0) printf("该姓名不存在! \n"); break; case3: return; default: printf("请在1-3之间选择\n"); } } 说明: 首先定义一个变量,输入值通过switch来选择相应模块。 用一个for循环和字符串比较函数来不断的把输入的数据和系统储存的信息比较,如果相同,则输出信息。 否则提示信息不存在! .修改信息函数 voidmodify() { inti,j,item,num; charsex1[3],s1[LEN],s2[LEN]; printf("请输入要要修改的学生的学号: \n"); scanf("%s",s1); for(i=0;i if(strcmp(student[i].number,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-email\n"); printf("8.退出本菜单\n"); printf("------------------\n"); while (1) {printf("请选择子菜单编号: "); scanf("%d",&item); switch(item) { case1: printf("请输入新的姓名: \n"); scanf("%s",s2); strcpy(student[num].name,s2);break; case2: printf("请输入新的年龄: \n"); scanf("%d",&student[num].age);break; case3: printf("请输入新的性别: \n"); scanf("%s",sex1); strcpy(student[num].sex,sex1);break; case4: printf("请输入新的出生年月: \n"); scanf("%s",s2); strcpy(student[num].time,s2);break; case5: printf("请输入新的: \n"); scanf("%s",s2); strcpy(student[num].add,s2);break; case6: printf("请输入新的号码: \n"); scanf("%s",s2); strcpy(student[num].tel,s2);break; case7: printf("请输入新的E-email: \n"); scanf("%s",s2); strcpy(student[num].email,s2);break; case8: return; default: printf("请在1-8之间选择\n"); } } } 说明: 首先输入要修改信息的学号,同样通过字符串比较函数来判断学号是否存在。 如果存在则通过switch语句来选择需要修改的信息,修改通过字符串复制函数。 修改结束后可以选择退出该模块,进入主界面。 .增加信息函数 voidincrease() {inti=n,j,flag; printf("请输入待增加的学生数: \n"); scanf("%d",&m); do {flag=1; while(flag) {flag=0; printf("请输入第%d个学生的学号: \n",i+1); scanf("%s",student[i].number); for(j=0;j if(strcmp(student[i].number,student[j].number)==0) {printf("已有该学号,请检查后重新录入! \n"); flag=1; break; } } printf("请输入第%d个学生的姓名: \n",i+1); scanf("%s",student[i].name); printf("请输入第%d个学生的年龄: \n",i+1); scanf("%d",&student[i].age); printf("请输入第%d个学生的性别: \n",i+1); scanf("%s",student[i].sex); printf("请输入第%d个学生的出生年月: (格式: 年.月)\n",i+1); scanf("%s",student[i].time); printf("请输入第%d个学生的: \n",i+1); scanf("%s",student[i].add); printf("请输入第%d个学生的: \n",i+1); scanf("%s",student[i].tel); printf("请输入第%d个学生的E-email: \n",i+1); scanf("%s",student[i].email); if(flag==0) { 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(student[i].number,s1)==0) {flag=1; for(j=i;j student[j]=student[j+1]; } if(flag==0) printf("该学号不存在! \n"); if(flag==1) { n--; printf("删除成功,显示结果请选择菜单6\n"); } } 说明: 该函数的目的是为了删除学生信息,我们定义了四个变量,其中数组s1用来输入需要删除的学生学号。 i为for的循环变量,用来遍历全部学生信息,通过strcmp函数来判断该学号是否存在。 如果存在,将定义的变量flag赋值为1,同时将i后面的每一个学生信息都赋给前一个学生的信息,达到删除的效果。 如果学号不存在,那么flag为0,这时系统则提示学号不存在。 函数调用完后返回主界面,可以继续选用其他模块的功能。 .输出信息函数 voidoutput() {inti; printf("所有学生的信息为: \n"); for(i=0;i { printf("%s%s%d%s%s%s%s%s\n",student[i].number,student[i].name,student[i].age, student[i].sex,student[i].time,student[i].add,student[i].tel,student[i].email); } } 说明: 此函数是为了输出所有的学生信息,要实现比较简单,只需直接通过一个循环将结构体中的元素遍历输出即可。 输出后返回主界面。 保存信息函数 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",student[i].number,student[i].name,student[i].age, student[i].sex,student[i].time,student[i].add,student[i].tel,student[i].email); } fclose(fp); } 说明: 定义该函数是为了保存信息至文件,首先必须定义一个文件指针,用指针打开函数打开一个已经存储好的文件,通过一个循环将n个学生的信息存进文件。 最后关闭文件,以保证信息不会丢失。 函数调用完毕后返回主界面,从而可以继续操作程序。 4、组员名单 XXX201014160127模块: 删除学生信息、输出学生信息、将信息存入文件 XXX201014160125模块: 结构体定义、录入信息 XXX201014160103模块: 修改学生信息 XXX201014160119模块: 查询学生信息 XXX201014160140模块: 主界面、增加学生信息 5、结论和心得 XXX: 在这次的C程序课程设计中我负责三个模块,分别是: 删除学生信息,输出学生信息和将学生信息存入文件。 我负责的是相对比较简单的模块,实现的时候不是很吃力。 但还是存在很多的小问题,列如忘记分号啊、某些表达式位置不正确导致的逻辑错误等等。 在这次设计中我体会到了写程序一定得细心,因为几乎全对还是等于错误,细节决定成败。 另外也加强了组员中的友谊,有很多问题都是大家一起讨论解决的。 我们讨论分配了各自负责的模块,在接口方面我们开始有一些分歧,但最后都达成了一致。 我们每个人都在努力,当最后我们用文件包含语句将所有的模块包含起来运行成功的那一刻,我觉得我的付出得到了收获。 当然这收获不仅仅是成功的完成了作业,更多是过程中的那种不懈努力的精神,组员间相互的帮助鼓舞,让我收益良多。 当然也要感谢老师在设计中对我的帮助,给我的启发,谢谢你们! XXX: 通过此次C语言程序设计实践,我实在是获益不浅! C语言是这个学期才开始学习的,有很多地方都没弄懂,所以一开始做题,也是有点模糊,在指导老师的指导下,我们慢慢的进入状态,我们做的是一个学生信息管理系统,内容包括很多。 运用的函数也是非常的复杂,我们一组有五个人,我们分工合作,我们每个人各负责一块功能区域,经过几星期的努力,我们完成了大半个程序,但是总是有很多错误出现,有好多是些小问题,这都是我们粗心大意造成的,所以设计程序一定要仔细,不容一点的马虎。 同时,也让我们知道了,合作的力量,如果是孤军奋战的话,我们也不能在规定时间内完成,当然,也多亏老师的指导。 程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看: 首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。 可得最后结论。 在程序设计中,可认为也是一个社会,每个一同的社会成员都有不同的想法。 程序设计学得的好坏要看你在社会中解决问题的能力的高低,所以不同的人编程的结果是不同的。 在这个社会中,经验与想法最为重要。 这次设计,让我掌握了C语言,而且还得到了用C语言解决实际问题的宝贵经验! XXX: 这学期我们学的C语言,以前就听过这个名字,打开书一看简直一窍不通,学好这门科简直就是一个挑战,课前课后都要把书啃一遍,要不然上课就跟不上,终于学期快结束了,我们有一个课程设计,完成一个复杂的程序,我们的题目是做"简易学生通讯录系统",难度不小啊。 通过组员的分工合作。 终于还是完成了设计。 首先感谢郭美老师给予的帮助。 通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,链表……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。 做它,难就难在不知从何开始,这个时候才知道上课老师们不厌其烦的教导是多么的宝贵,这个时候才后悔上课的时候没有认真的听讲。 可是现在一切都晚了,还好时间还算是充裕,只好拿出书本重新复习一下。 特别是结构体,指针的部分,几乎是一片空白。 不过经过几天的努力,大体上把课本上的知识点看了一遍,知识点也都基本是撑握了,所以一下一步就是开始正式的编程序了。 不过毕竟是个新手,还是不知如何下手,于是就在网上下了一篇类似的程序,经过仔细的研究,终于读懂了C语言编程的基本过程和方法。 经过一波三折,终于开始正式编程。 编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。 而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。 所以认真仔细就是非常重要的了。 在这次合作中我是负责“修改信息”这一模块的: (如下)voidmodify()/*修改信息*/ {inti,j,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("
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 信息管理 系统