C语言课程设计报告学生信息管理系统.docx
- 文档编号:9927398
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:49
- 大小:81.33KB
C语言课程设计报告学生信息管理系统.docx
《C语言课程设计报告学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告学生信息管理系统.docx(49页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告学生信息管理系统
前言
C语言是一门通用的计算机编程语言,应用广泛。
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
近年来,C语言在国内得到了迅速的推广和应用。
作为一门通用的语言,在过去很流行吗,将来依然会如此。
几乎每一个理工科或者其他专业的学生毫不例外的要学习它,同时,C语言作为“全国计算机二级等级考试”中的一门可选语言,也是用来衡量计算机程序设计水平的一个重要标准。
从C语言产生到现在,它已成为最重要和最流行的编程语言之一。
在各种流行编程语言中,都能看到C语言的影子,如JAVA的语法与C语言基本相同。
学习、掌握C语言是每一个计算机技术人员的基本功之一。
C语言具有高级语言的强大功能,却又有很多直接操作计算机硬件的功能(这些都是汇编语言的功能),因此,C语言通常又被称为中级语言。
学习和掌握C语言,即可以增进对于计算机底层工作机制的了解,又为进一步学习其他高级语言打下了坚实的基础。
C语言程序设计是一门实践性很强的课程,所以本学科的实验实训非常重要。
所以我们进行了本次课程设计实践。
在这个过程中我们都学到了很多,此报告便是这次课程设计的经过、流程,介绍了部分自己编写的程序。
1.问题概述………………………………………………………02
2.系统需求分析…………………………………………………02
3.系统概要设计…………………………………………………02
4.系统的详细设计………………………………………………06
5.系统的测试及调试…………………………………………15
6.用户手册………………………………………………………21
7.总结……………………………………………………………21
8.参考文献………………………………………………………22
9.附录……………………………………………………………23
1.问题概述
设计一个学生综合测评的信息及成绩的管理系统,以解决传统纸质信息统计的不易修改,储存及放置等诸多不便及弊端。
来简化学校的办公,节约时间及人力。
1.系统需求分析
在学生信息的日常管理中,经常需要对学生相关信息进行处理,采用传统的手工记录,查询方式,显然有很多不便,如多次的增、删、改可能使信息变得混乱,为今后的信息提取带来很多麻烦。
为了解决这一问题,可采用现代化的手段——计算机进行系统的管理。
这样可大大提高管理的质量和效率,并且使学生的信息管理也从手工操作中解脱出来,减少纸制材料的数量,对日常信息的查询、方便、快捷。
因此,基于这些方面的考虑,决定开发本系统。
2.系统概要设计
设计一个学生综合测评的信息及成绩的管理系统,以解决传统纸质信息统计的不易修改,储存及放置等诸多不便及弊端。
来简化学校的办公,节约时间及人力。
3.1系统的主要功能
系统的主要功能是实现学生基本的信息及成绩的录入和管理。
主要包括:
A、学生信息处理
(1)学生信息的录入。
(2)学生信息的修改。
(3)学生信息的浏览
B、学生数据处理:
(1)学生考试数据输入并计算平均分及名次
(2)学生测评数据输入并计算综合测评总分及名次
(3)学生数据的修。
(4)学生数据的查询
C、学生综合信息显示
3.2系统的总体结构
(1)程序主界面的设计
主界面
图3.1.1系统主界面结构图
(2)学生信息处理子界面设计
图3.1.2系统子界面结构图1
图3.1系统子界面结构图2
1、学生信息处理
(1)录入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。
学生信息可先输入到数组中,排序后可写到文件中。
(2)修改同学信息。
2、学生数据处理:
(1)考试成绩录入及处理:
考试成绩=(语文+数学+外语)/3计算考试成绩,并计算考试名次,提示:
先把学生信息读入数组,然后按提示输入每科成绩,计算考试成绩,求出名次,最后把学生记录写入一个文件中。
(2)测评成绩录入及处理:
综合测评总分=(考试成绩)*0.6+(同学互评分)*0.1+品德成绩*0.1+任课老师评分*0.2。
(3)学生数据修改:
输入学号,读出并显示该同学信息,输入新数据,将改后信息写入文件
(4)学生数据查询:
输入学号,即读出所有数据信息,并显示出来。
3、查询学生综合信息
输入学号即读出综合信息,并显示出来
3.3系统软硬件环境
本程序所适用的计算机系统软硬件环境要求为:
硬件环境:
Pentium?
III?
500以上内存:
256M?
?
软件环境:
Windows7
3.4数据结构设计
学生信息数据结构类型如下:
structstudent
{
intnum;/*学号*/
charname[20];/*学生姓名*/
charsex[10];/*性别男/女*/
charhome[200];/*家庭住址*/
ints1;/*语文成绩*/
ints2;/*数学成绩*/
ints3;/*英语成绩*/
intave;/*三科平均成绩*/
intTel;/*联系方式*/
intm1;/*考试名次*/
inta1;/*同学互评分*/
inta2;/*品德成绩*/
inta3;/*任课教师评分*/
intz;/*综合测评总分*/
intm2;/*综合测评名次*/
}stu[N];
4系统的详细设计
根据系统总体结构对问题进行的模块划分,对总的问题可划分为:
学生信息处理、学生数据处理、学生综合信息查询三个大模块,另还设置了用户帮助函数及退出系统。
首先在主函数中调用了voidone()函数来显示主菜单,主菜单中调用子菜单也就是学生信息处理、学生数据处理的菜单。
学生信息处理用voidinfo()来显示子菜单1,子菜单1中调用了voidinfo_1();voidinfo_2()。
两个函数来实现学生信息的录入和修改。
学生数据处理用voiddata()来显示子菜2,子菜单2中调用了voiddata_2;voiddata_1;voiddata_3;voiddata_4等函数来实现数据的录入修改及查询。
还使用了voidsort_num(structstudenta[],intn);
voidsort_ave(structstudenta[],intn);
voidsort_z(structstudenta[],intn);
三个排序函数来处理学生的数据
在最后的学生综合信息查询中使用的是voidlook()来实现其功能
在用户指南中使用了voidhelp()函数来实现其功能
以上就是此系统中使用的函数来实现其功能。
4.1主菜单voidone()
1.系统流程
该函数主要用来显示主菜单的内容以及进入子菜单实现功能,该函数实现过程中首先定义了一个变量opt1,这是用户选择进入那个模块的选项。
首先判断opt1的值,如果为1则调用voidinfo()进入信息管理模块,如果为2则调用voiddata()进入数据管理模块,如果为3则调用voidlook()进入学生综合信息查询功
,如果为4则调用voidhelp()进入用户指南函数查看,如果为5则退出系统。
如果用户没有输入12345中的选项,则会提示输入错误请重新输入。
2.代码实现
voidone()/*主菜单函数*/
{
intopt1;/*主菜单选项*/
printf("欢迎使用学生综合测评系统\n\n");
printf("1:
学生信息处理2:
学生数据处理\n\n3:
学生综合信息");
printf("4:
用户使用指南\n\n");
printf("5:
退出\n\n");
printf("请输入12345中的任意一个选项进行操作:
");
loop:
scanf("%d",&opt1);
switch(opt1)
{
case1:
info();
break;
case2:
data();
break;
case3:
look();
break;
case4:
help();
break;
case5:
break;
default:
printf("输入错误,请重新输入12345中的一项");
scanf("%d",&opt1);
gotoloop;
}
}
4.2子菜单1voidinfo()
1.系统流程
该函数主要用来显示子菜单1的内容以及进入功能实现函数,该函数实现过程中首先定义了一个变量opt2,这是用户选择进入那个功能的选项。
首先判断opt2的值,如果为1则调用voidinfo_1()进入学生信息录入功能,如果为2则调用voidinfo_2()进入学生信息修改功能,如果为3则调用voidone()返回到主菜单。
如果用户没有输入123中的选项,则会提示输入错误请重新输入。
2.代码实现
voidinfo()/*信息处理函数*/
{
intopt2;/*子菜单选项*/
printf("\n\n欢迎进入信息处理\n\n");
printf("1.学生信息录入\n\n2.学生信息的修改\n\n");
printf("3.返回\n\n");
printf("请输入123中的任意一个选项进行操作");
loop:
scanf("%d",&opt2);
switch(opt2)
{
case1:
info_1();
break;
case2:
info_2();
break;
case3:
one();
break;
default:
{printf("输入错误,请重新输入123中的一项");
gotoloop;}
}
}
4.3学生信息录入voidinfo_1()
1.系统流程
该函数运行后,首先打开文件,然后判断文件是否为空。
如果为空设置一个变量count来记录录入学生的数目。
如果不为空,则从文件中读取count的值。
然后开始录入学生信息,设置变量输入s,用switch语句来决定是否录入或退出。
输入1录入0退出2返回上一层。
在1中用goto语句实现循环录入到数组中。
在2中调用voidone().最后将学生信息的数组和count写入文件,然后关闭文件。
2.代码实现
voidinfo_1()/*信息录入函数*/
{
FILE*fp;
ints,i,count;
count=0;
i=1;
if((fp=fopen("stu","rb+"))==NULL)
{
if((fp=fopen("stu","wb"))==NULL)
{
printf("Con'topenfile\n");
exit
(1);
}
stu[0].num=0;
}
else
{
fclose(fp);
if((fp=fopen("stu","ab+"))==NULL)
{
printf("Con'topenfile\n");
exit
(1);
}
fread(stu,sizeof(structstudent),N,fp);
}
fscanf(fp,"%d",&stu[0].num);
loop:
printf("\n\n您将开始录入学生信息\n输入1将继续\n输入2返回上一层\n输入0将退出\n");
looo:
scanf("%d",&s);
switch(s)
{
case0:
break;
case1:
{
count++;
printf("\n\n您将输入第%d学生的信息:
",count);
printf("\n学号:
");
scanf("%d",&stu[i].num);
printf("姓名:
");
scanf("%s",stu[i].name);
printf("性别:
");
scanf("%s",stu[i].sex);
printf("家庭住址:
");
scanf("%s",stu[i].home);
printf("联系电话:
");
scanf("%d",&stu[i].Tel);
i++;
gotoloop;
break;
case2:
info();
break;
default:
{
printf("\n输入错误,请重新输入012中的一项");
gotolooo;
}
}
}
sort_num(stu,i);
stu[i+1].num=0;
stu[0].num+=count;
fseek(fp,0,SEEK_SET);
fwrite(stu,sizeof(structstudent),N,fp);
fseek(fp,0,SEEK_SET);
fread(stu,sizeof(structstudent),N,fp);
for(i=1;i<=stu[0].num;i++)
{
printf("%d\n",stu[i].num);
}
system("pause");
fclose(fp);
}
4.4学生信息修改voidinfo_2()
1.系统流程
该函数运行后,首先打开文件,读取文件内容到数组中。
设置变量num用户输入一个学号。
然后用一个for循环将num与数组中的学号的值进行比较,如果相同,跳出循环。
找到后将其输出。
询问是否修改。
修改后将其写入文件中。
关闭文件。
2.代码实现
voidinfo_2()/*信息修改函数*/
{
FILE*fp;
intj;
if((fp=fopen("stu","rb"))==NULL)
{
printf("Cannotopenfile\n");
exit
(1);
}/*打开文件*/
fread(stu,sizeof(structstudent),1,fp);
for(j=1;j<=stu[0].num;j++)
fread(&stu[j],sizeof(structstudent),1,fp);
fclose(fp);
inti,num,xu,a;
llll:
printf("\n\n请输入需要修改信息的学生的学号:
\n");
scanf("%d",&num);
for(i=1;i<=stu[0].num;i++)
{
if(stu[i].num==num)
break;
}/*查找需要修改的学生的信息*
if(i>=stu[0].num)
{printf("查无此人");
return;}
printf("请问您是否是需要修改此生的信息:
");
printf("学号%d姓名%s性别%s家庭住址%s联系电话%d",stu[i].num,stu[i].name,stu[i].sex,stu[i].home,stu[i].Tel);
printf("\n\n如果是请输入1不是请输入2:
\n");
loop:
scanf("%d",&xu);
switch(xu)
{
case1:
printf("请输入新的信息\n");
printf("学号:
");
scanf("%d",&stu[i].num);
printf("姓名:
");
scanf("%s",stu[i].name);
printf("性别:
");
scanf("%s",stu[i].sex);
printf("家庭住址:
");
scanf("%s",stu[i].home);
printf("联系电话:
");
scanf("%d",&stu[i].Tel);
printf("完成修改!
");
break;
case2:
break;
default:
printf("\n输入错误,请重新输入01中的一项");
gotoloop;
}/*修改学生信息*/
if((fp=fopen("stu","wb"))==NULL)
{
printf("Cannotopenfile\n");
exit
(1);
}/*打开文件*/
fwrite(stu,sizeof(structstudent),stu[0].num,fp);/*写入文件中*/
fclose(fp);
printf("\n是否继续修改学生信息\n是请输入1\n退出请输入2\n返回上一层请输入0");
lllk:
scanf("%d",&a);
switch(a)
{
case0:
info();
break;
case1:
gotollll;
break;
case2:
break;
default:
printf("\n输入错误,请重新输入01中的一项");
gotolllk;
}/*关闭文件*/
}
学生数据模块的函数与学生信息模块的函数相似,录入,修改,查询功能。
4.5学生综合信息查询voidlook()
1.系统流程
2.该函数运行后,首先打开文件,读取文件内容到数组中。
设置变量num用户输入一个学号。
然后用一个for循环将num与数组中的学号的值进行比较,如果相同,跳出循环。
找到后将其输出。
然后询问是否继续修改,如果是goto语句回到输入学号那里,如果不是,关闭文件退出。
2.代码实现
voidlook()/*综合信息显示函数*/
{
intm;
FILE*fp;
if((fp=fopen("stu","rb"))==NULL)
{
printf("Cannotopenfile\n");
exit
(1);
}
fread(stu,sizeof(structstudent),1,fp);
for(m=1;m<=stu[0].num;m++)
fread(&stu[m],sizeof(structstudent),1,fp);
fclose(fp);/*读取文件*/
inti,num,a;
llll:
printf("\n\n请输入需要查询综合信息的学生的学号:
\n");
scanf("%d",&num);
for(i=1;i<=stu[0].num;i++)
{
if(stu[i].num==num)
break;
}/*查找需要修改的学生的信息*/
if(i>=stu[0].num)
{printf("查无此人");
return;}
printf("学生数据显示:
\n\n");
printf("学号%d姓名%s性别%s家庭住址%s联系电话%d\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].home,stu[i].Tel);
printf("语文%d数学%d英语%d平均分%d考试名次%d\n",stu[i].s1,stu[i].s2,stu[i].s3,stu[i].ave,stu[i].m1);
printf("同学互评分%d品德成绩%d任课教师评分%d综合测评总分%d综合排名%d",stu[i].a1,stu[i].a2,stu[i].a3,stu[i].z,stu[i].m2);
printf("\n是否继续查询学生数据是请输入1否请输入2\n");
lllk:
scanf("%d",&a);
switch(a)
{
case1:
gotollll;
break;
case2:
break;
default:
printf("\n输入错误,请重新输入01中的一项");
gotolllk;
}
fclose(fp);/*关闭文件*/
}
4.6用户指南voidhelp()
1.系统流程
该函数主要用来提示用户此系统的信息,进入后浏览信息,最后定义一个变量i,请用户输入1返回到主菜单进行操作。
如果用户输入的不是1则提示请输入1。
2.代码实现
voidhelp()
{
inti;
printf("本系统可以存储学生的基本信息和各科成绩,并能计算考试成绩,综合测评成绩和排名。
\n\n");
printf("基本信息包括:
学号、姓名、性别、家庭住址、联系电话;\n\n各科成绩包括:
语文、数学、英语成绩;\n\n");
printf("其它包括:
考试名次、同学互评分、品德成绩、任课教师评分等。
\n\n");
printf("说明:
考试成绩排名是按照考试成绩平均分计算的(平均分=(语+数+外)/3)\n\n");
printf("综合测评总分=((考试成绩)*0.6+(同学互评分)*0.1+(品德成绩)*0.1\n+(任课教师评分)*0.2)\n\n");
printf("此系统最多可管理5000人信息。
");
printf("其它请按照提示操作即可。
\n");
printf("返回上一层请输入1");
loop:
scanf("%d",&i);
if(i=1)
one();
else
{
printf("输入错误请重新输入:
");
gotoloop;
}
}
5系统测试及调试
系统的测试及调试是为了发现程序中错误,而执行程序的过程。
5.1运行过程:
1)运行该程序,进入一个主菜单函数,出现了选择的菜单:
可输入选项进入子菜单(两个子菜单分别进入):
2)在进入第一个子菜单后可进行学生的信息处理:
在输入1后可进行学生信息的录入:
每录完一个信息后会询问是否继续录入或者返回上一层或者退出
返回上一层,便回到了主菜单可继续进行操作:
在信息处理内选择2来修改学生的信息:
3)在进入第二个子菜单后可进行学生的数据处理:
数据录入:
数据查询:
3)在主菜单选择3进入后可查询综合信息:
4)在主菜单选择4进入后可查看用户指南:
5)输入5便退出系统:
5.2系统调试过程中遇到的问题:
1)录入学生信息后能够写进文件,但是只能查询时只能查询到第一个人的信息
错误原因:
录入信息后储存后。
无法知道信息的条数。
读取的时候只读取了第一条。
解决方案:
在信息录入的时候设置一个变量来记录学生信息录入的条数。
并且将条数写进文件中,读取的时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 学生 信息管理 系统