C语言课程设计报告-学籍信息管理系统.docx
- 文档编号:8970110
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:33
- 大小:566.76KB
C语言课程设计报告-学籍信息管理系统.docx
《C语言课程设计报告-学籍信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告-学籍信息管理系统.docx(33页珍藏版)》请在冰点文库上搜索。
中 国 地 质 大 学
本科生课程论文封面
5
课程设计评语
对课程论文的评语:
平时成绩:
课程论文成绩:
总成绩:
评阅人签名:
注:
1、无评阅人签名成绩无效;
2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
目 录
课程设计评语 2
目录 3
1.课程论文题目 4
2.程序设计思路 5
3.功能模块图 5
4.数据结构设计 7
5.算法设计 8
6.程序代码 18
7.程序运行结果 26
8.编程中遇到的困难及解决方法 30
9.总结心得及良好建议 31
10、致
谢 31
1.课程论文题目
【要求】:
使用下面的数据,设计一个简单的学籍信息管理系统。
学生基本信息文件(A.TXT)及其内容:
(A.TXT文件不需要编程录入数据,可用文本文档编辑工具直接生成)
学号
姓 名
性别
宿舍号码
电话号码
01
张成成
男
501
87732111
02
李成华
女
101
87723112
03
王成凤
女
101
87723112
04
张明明
男
502
87734333
05
陈 东
男
501
87732111
06
李 果
男
502
87734333
07
张园园
女
102
87756122
………………
学生成绩基本信息文件(B.TXT)及其内容:
学号
课程编号
课程名称
学分
平时成绩
实验成绩
卷面成绩综合成绩学分
01
A01
大学物理
3
66
78
82
02
B03
高等数学
4
78
-1
90
01
B03
高等数学
4
45
-1
88
02
C01
VF
3
65
76
66
………………
功能要求及说明:
(1)数据录入功能:
对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名
称、学分、平时成绩、实验成绩、卷面成绩共7个数据。
综合成绩、学分由程序根据条件自动运算。
综合成绩的计算如下所述。
①如果本课程的实验成绩为-1,则表示无实验,综合成绩=平时成绩*30%+卷面成绩*70%;
②如果实验成绩不为-1,表示本课程有实验,综合成绩=平时成绩*15%+实验成绩*.15%+卷面成绩*70%。
实得学分的计算:
采用等级学分制。
①综合成绩在90-100之间,应得学分=学分*100%。
②综合成绩在80-90之间,应得学分=学分*80%。
③综合成绩在70-80之间,应得学分=学分*75%。
④综合成绩在60-70之间,应得学分=学分*60%。
⑤综合成绩在60以下,应得学分=学分*0%。
(2)查询功能:
分为学生基本情况查询和成绩查询两种。
①学生基本情况查询:
输入一个学号或姓名(可实现选择),查出此生的基本信息并显示输出。
输入一个宿舍号码,可查询出本室所有的学生的基本信息并显示输出。
②成绩查询:
输入一个学号时,查询出此学生的所有课程情况,格式如下:
学号:
xx 姓名:
xxx
课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx课程编号:
xxx课程名称:
xxxxx综合成绩:
xxxx实得学分:
xx
………………
共修:
xx科,实得总学分为:
xxx
(3)删除功能:
当在A.TXT中删除一个学生时,自动地在B.TXT中删除此人所有信息。
(4)排序功能:
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
2.程序设计思路
这个C语言课程设计题目是关于学生学籍信息管理系统的设计。
根据设计题目的要求,数据结构采用结构体数组,是用来提供学生基本信息和学生成绩基本信息结构体数组。
题目要求能够完成录入数据,查询,删除和排序的功能,所以程序依次以主函数板块、数据录入功能板块、查询功能板块、删除功能板块、排序功能板块的顺序进行,另外,程序中还用到输入和输出等基本函数。
运用函数实现要求的各项功能,将各个分函数依照一定的次序列出,这样一方面可以使程序易于编写和阅读,另一方面还可以很方便地在编程过程中,另行调试各个分函数,便于检查在程序设计过程中出现的错误,并可以及时修改。
3.功能模块图
根据以上的需求分析,可以将这个系统分为以下主要功能板块:
主函数板块、数据录入功能板块、查询功能板块、删除功能板块、排序功能板块。
6
成绩查询
按实得学分排序 sort2()
按综合成绩排序 sort1()
按宿舍号码QueryByRoom(int)
按学号 QueryById(int)
退出功能
exit()
排序功能DataSort()
删除功能DataDelete()
按学号 QueryMark(int)
查询功能DataQuery()
数据录入【DataInput()】
需要特别说明的两部分有:
⑴系统中的结构体定义和函数声明部分再次没有得到明显的体现,但是在整个程序中所起的基础性作用是不可替代的,所有的分程序都是在此基础上进行的。
⑵读取数据和输出数据函数在各个分程序中都起着重要作用,属于公共函数的范畴。
显示主菜单【DisplayMainMenu()】
除以上两部分中所述的定义声明和部分函数外,本设计题目所要求的其他所有功能均能在以下系统功能板块中得以体现,具体如下所示:
学籍信息管理系统
学生基本情况查询
4.数据结构设计
本程序中主要运用了两大结构体数组,一个是学生基本信息的结构体数组(StudentInfosi[30]),另一个是学生成绩基本基本信息的结构体数组(MarkInfomi[150])。
在程序运行过程中,很多子函数都调用了这两个结构体数组中的信息,或是对其进行阅读输出,或是对其进行其他简单操作。
整个程序自始自终始终紧紧围绕这两大结构体数组进行。
具体定义如下:
⑴利用了组合体的方式定义结构体数组,提供学生基本信息,定义如下:
typedefstruct{
intId; //学号charname[10];//姓名charsex[6]; //性别introom; //宿舍号
inttel; //电话号码
}StudentInfo; //定义学生信息的结构体类型
⑵同时定义了另一结构体数组,提供学生成绩基本信息,定义如下:
typedefstruct{intId;
charcourseNo[10]; //课程编号charcourseName[20];//课程名floata;//课程学分
floatb;//平时成绩floatc;//实验成绩floatd;//卷面成绩floate;//综合成绩floatf;//实际学分
}MarkInfo; //定义课程信息的结构体类型
使用以上结构体数组,使程序变得思路清晰,设计过程也变得相对简单。
同时,定义并使用了如下函数,声明和定义
voidReadFile();
voidDisplayMainMenu();voidDataInput();
23
voidDataQuery();voidDataDelete();voidDataSort();
voidQueryById(int);voidQueryByRoom(int);voidQueryMark(int);voidsort1();
voidsort2();voidmarkput();
StudentInfosi[30]; //学生信息结构数组
MarkInfomi[150]; //学生成绩结构数组
int sp=0; //学生信息结构数组中学生数
int mp=0; //学生成绩结构数组中成绩数
5.算法设计
1.、定义结构体,并且进行函数声明
在这一部分,定义了关于学生基本信息和学生成绩信息的两个结构体数组,用于存储数据,另外对本程序中所用到的函数进行了详细地声明,通过定义数组和对函数的声明为本程序奠定了重要的基础。
#include
typedefstruct{
intId; //学号charname[10];//姓名charsex[6]; //性别introom; //宿舍号
inttel; //电话号码
}StudentInfo; //定义学生信息的结构体类型
typedefstruct{intId;
charcourseNo[10]; //课程编号charcourseName[20];//课程名floata;//课程学分
floatb;//平时成绩floatc;//实验成绩floatd;//卷面成绩floate;//综合成绩
根据n的值调用各功能模块函数
floatf;//实际学分
}MarkInfo; //定义课程信息的结构体类型
//定义结构数组为全局变量StudentInfosi[30];//学生信息结构数组MarkInfomi[150]; //学生成绩结构数组
int sp=0; //学生信息结构数组中学生数
int mp=0; //学生成绩结构数组中成绩数
voidReadFile();
voidDisplayMainMenu();voidDataInput();
voidDataQuery();voidDataDelete();voidDataSort();
voidQueryById(int);voidQueryByRoom(int);voidQueryMark(int);voidsort1();
voidsort2();voidmarkput();
2.主函数:
主函数设计的很简洁,只提供输入,功能处理和输出部分的函数的调用,其中各功能模块用菜单方式选择,为我们提供了五个功能选项,让我们可以很方便地通过这五个功能选项来调用各个功能模块函数。
输入n,判断是否1-5
显示一系列功能选项(即主菜单)
按实际学分
按综合成绩
查 询 成 绩
查询学生信息
序
询
定义整型变量X作为功能菜单选项的选择方式。
Voidmain()
{
intx;ReadFile();while
(1)
{
DisplayMainMenu();scanf (“%d”,&x);switch(x)
{
case1:
DataInput();break;case2:
DataQuery();break;case3:
DataDelete();break;case4:
DataSort();break;case5:
exit();
}
}
}
3.各功能模块的设计:
所用到的各个子函数
排
查
数
据 录 入
菜
单 显 示
读取数据、计算
模块功能图如下所示:
*************** 读 取 数 据 、 计 算
***************
在这段功能模块中,利用指针变量来读取结构体数组文件中的相应信息,是程序的编写、阅读和运行变得简洁明了。
此外,在这段程序中,还对文件中的数据按照题目的具体要求对综合成绩和学分做了自动计算。
VoidReadFile()
{
FILE*fp;
if((fp=fopen(“A.txt”,”r”))==NULL)printf(“cantopenthefile\n”);while(!
feof(fp))
{
fscanf(fp,”%d%s%s%d%d”,&si[sp].Id,si[sp].name,&si[sp].sex,&si[sp].room,&si[sp].tel);sp++;
}
fclose(fp);
fp=fopen(“B.txt”,”r”);while(!
feof(fp))
{
fscanf(fp,”%d%s%s%f%f%f%f”,&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c,&mi[mp].d);
if(mi[mp].c==-1)
mi[mp].e=0.3*mi[mp].b+0.7*mi[mp].d;
else
mi[mp].e=0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;
if(mi[mp].e>=90.)mi[mp].f=mi[mp].a;elseif(mi[mp].e>=80.)
mi[mp].f=mi[mp].a*0.8;elseif(mi[mp].e>=70.)
mi[mp].f=mi[mp].a*0.75;elseif(mi[mp].e>=60.)
mi[mp].f=mi[mp].a*0.6;elsemi[mp].f=0;
mp++;
}
fclose(fp);
}
***************显 示 主 菜 单***************
这部分是对本程序的主要功能做出的展示,体现了本程序的五大功能,简洁明白,一
目了然。
VoidDisplayMainMenu()
{
printf(“\n1)数据录入\n2)数据查询\n3)数据删除\n4)数据排序\n5)程序结束
\n“);
}
***************数 据 录 入*******************
录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共
7个数据,即对关于学生成绩基本信息的结构体数组进行输入,也就是文件B.TXT中的内容。
VoidDataInput()
{
FILE*fp;intI;
printf(“学生的学号课程编号课程名称学分平时成绩实验成绩卷面成绩\n”);while
(1)
{scanf(“%d%s%s%f%f%f%f”,&mi[mp].Id,mi[mp].courseNo,mi[mp].courseName,&mi[mp].a,&mi[mp].b,&mi[mp].c,&mi[mp].d);
if(mi[mp].Id==-1)break;
if(mi[mp].c==-1)
mi[mp].e=0.3*mi[mp].b+0.7*mi[mp].d;
else
mi[mp].e=0.15*mi[mp].b+0.15*mi[mp].c+0.7*mi[mp].d;
if(mi[mp].e>=90.)mi[mp].f=mi[mp].a;elseif(mi[mp].e>=80.)
mi[mp].f=mi[mp].a*0.8;elseif(mi[mp].e>=70.)
mi[mp].f=mi[mp].a*0.75;elseif(mi[mp].e>=60.)
mi[mp].f=mi[mp].a*0.6;elsemi[mp].f=0;
mp++;}
fp=fopen(“B.txt”,”r+”);for(i=0;i fprintf(fp,”%d%s%s%f%f%f%f”,&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[mp].b,&mi[i].c,&mi[i].d); fclose(fp); } *******************查 询******************** 此段程序是为实现信息查询功能而设计的。 总体来讲,分为两大功能模块,一是学生基本信息查询,二是对学生成绩的查询。 在第一种查询,即对学生基本信息的查询中,又提供了两种查询方式,一种是按学号对学生基本信息进行查询,一种是按宿舍号码对学生基本信息进行查询。 VoidDataQuery() { intx,y,z; printf(“\n1)学生基本情况查询\n2)成绩查询\n”); 选择查询内容 scanf(“%d”,&x); if(x==1)//查询学生信息 { printf(“1)按学号查询2)按宿舍查询\n”); 选择查询方式 scanf(“%d”,&y);if (y==1) { printf(“输入学号\n”); 按学生学号查询 scanf(“%d”,&z);QueryById(z); } if (y==2) { printf(“输入宿舍号\n”); 按学生宿舍号码进行查询 scanf(“%d”,&z);QueryByRoom(z); } } if (x==2) //查询成绩信息 查询学生成绩(输入学号) { printf(“输入学号\n”);scanf(“%d”,&y);QueryMark(y); } } ******************删 除******************* 此模块提供了按学号实现删除学生信息的功能,当在文件A.TXT中删除一个学生时,自动地在文件B.TXT中删除此人所有信息。 VoidDataDelete() { FILE*fp;intx; inti=0;intk,d; printf(“输入学号\n”);scanf(“%d”,&x); while(si[i].Id! =x)i++;if(i { for(k=I;k { si[k]=si[k+1]; } } if(i for(k=0;k { if(mi[k].Id==x)d++; elsemi[k-d]=mi[k]; } mp=mp–d; fp=fopen(“D: B.txt”,”r+”);for(i=0;i fprintf(fp,”%d%s%s%f%f%f%f”,&mi[i].Id,mi[i].courseNo,mi[i].courseName,&mi[i].a,&mi[i].b,&mi[i].c,&mi[i].d); } *****************按 学 号 查 询***************** 按学生学号对学生基本信息进行查询。 VoidQueryById(intx) { intI; for(i=0;i { if(si[i].Id==x) { printf(“\n学号姓名性别宿舍号码电话号码\n”); printf(“%d%s%s%d%d\n”,si[i].Id,si[i].name,si[i].sex,si[i].room,si[i].tel); } } } ***************按宿舍号查询***************** 按宿舍号码对学生基本信息进行查询。 voidQueryByRoom(intx) { inti; for(i=0;i { if(si[i].room==x) { printf("\n学号姓名性别宿舍号码电话号码\n"); printf("%d%s%s%d%d\n",si[i].Id,si[i].name,si[i].sex,si[i].room,si[i].tel); } } } *****************成 绩 查 询******************* 对成绩进行查询要求输入学生的学号就可以查询出学生所有的课程成绩情况,并且能够按一定的格式输出。 voidQueryMark(intx) { inti=0;while(si[i].Id! =x) { i++; } printf("学号: %d 姓名: %s\n",si[i].Id,si[i].name);for(i=0;i { if(si[i].Id==x) { printf("课程编号: %s 课程名称: %s 综合成绩: %f 实得学分: %f\n",mi[i].courseNo,mi[i].courseName,mi[i].e,mi[i].f); } } } *****************排 序****************** 排序功能是本程序的一大功能,且本程序提供了两种排序的方式,一种是按综合成绩排序,一种是按实得学分排序。 VoidDataSort() { intx; printf(“1)综合成绩排序\n2}实际学分排序\n”); 列出供选择的排序方式 scanf(“%d”,&x); if(x==1)sort1(); if(x==2)sort2(); 对排序方式做出选择 } ***************按 综合成绩排序****************** 利用voidsort1()函数按计算所得的综合成绩进行排序。 voidsort1() { inti,j; MarkInfot; for(i=mp-1;i>=1;i--) { for(j=0;j { if(mi[j].e>mi[j+1].e) { t=mi[j]; mi[j]=mi[j+1];mi[j+1]=t; } } } markput(); } ******************按实得学分排序******************** 按voidsort2()函数计算所得的实得学分进行排序。 voidsort2() { inti,j; MarkInfot; for(i=mp-1;i>=1;i--) { for(j=0;j { if(mi[j].f>mi[j+1].f) { t=mi[j]; mi[j]=mi[j+1];mi[j+1]=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 学籍 信息管理 系统