C语言课设报告.docx
- 文档编号:6400834
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:64
- 大小:429.67KB
C语言课设报告.docx
《C语言课设报告.docx》由会员分享,可在线阅读,更多相关《C语言课设报告.docx(64页珍藏版)》请在冰豆网上搜索。
C语言课设报告
华中科技大学计算机科学与技术学院
C语言课程设计报告
题目:
学生成绩信息管理系统
专业:
计算机科学与技术
班级:
学号:
姓名:
成绩:
指导教师:
完成日期:
2015年月日
一、系统需求分析
学生成绩信息管理系统,实现了学生班级信息、学生基本信息、学生成绩信息的管理与统计,完成信息的录入、修改、删除、保存以及各个信息的查询操作,完成五种较为简单的信息统计功能,系统采用双十字链表实现,信息全部存储在两个链表中,系统对信息的数据维护通过维护系统的链表进行实现,通过遍历十字链表完成系统各个数据的查找,并完成统计。
系统包含文本菜单,用于提示用户如何对系统进行操作,系统具有良好的容错性,界面整体美观大方。
二、总体设计
系统需要完成的是学生信息的管理,学生信息细分又分为三层信息,第一层学生班级信息,该类信息包含学生班级的编号、班级导师姓名、班级导师联系方式,第二层学生信息为学生基本信息,该信息包含了学生的班级编号、学号、姓名、性别等基本信息,还包含已修课程学分、已获学分、加权平均分等成绩总体情况;第三层信息即为学生的成绩信息,该层信息包含学号、课程名、开课学期、学时数、学分、考试成绩、补考成绩等信息。
系统的所有信息即用如上的三层双十字链表保存,从功能上来看,系统主要分为六个功能,一,班级信息的数据维护;二,学生基本信息的数据维护;三,成绩信息的数据维护;四,数据的查询;五,数据的统计;六,数据的保存与读取。
而前三个功能,又分别细分为三个子功能,添加信息、修改信息、删除信息。
第四个功能数据的查询分为3个一级查询,分别选择是班级、学生、成绩,而每个一级查询下分别又有两个二级查询,分别通过两种方式对信息进行查询;第五个功能下面有五个子功能完成对信息的统计。
三、数据结构设计
本系统使用的数据结构是双十字链表,链表的节点分别使用三种结构体完成,三种结构体分别用来存储班级信息、学生信息、成绩信息,三种结构体的表达如下:
班级信息:
中文字段名
类型及长度
举例
班级编号
char[10]
EE201401
班导师
char[20]
王多强
联系电话
char[15]
189xxxxxxxx
学生信息:
中文字段名
类型及长度
举例
班级编号
char[10]
EE201401
学号
char[12]
U201412345
姓名
char[20]
张三
性别
char
m//m:
表示男f:
表示女
已修课程学分
float
44.5//本项及后两项不需录入
已获学分
float
39.0//而是计算后填入
加权平均分
float
78.33//保留两位小数
成绩信息:
中文字段名
类型及长度
举例
学号
char[12]
U201412345
课程名
char[30]
C语言程序设计
开课学期
int
1//1-8学期
学时数
int
88
学分
float
5.5
考试成绩
int
56
补考成绩
int
65
双十字链表的使用原理如下图:
值得一提的是在学生信息链表中,每个节点需要有一个指向成绩子链表的指针,以达成两条链表的链接工作,形成十字链表。
四、详细设计
一.班级信息维护:
1.添加班级信息:
输入班级编号,系统会自动检查系统中是否存在相同编号的班级信息,如果存在则不可以继续添加,如果不存在,则继续完成其余信息的录入。
2.修改班级信息:
输入班级编号,系统会自动检查系统中是否存在相同编号的班级信息,如果不存在则不可以继续修改,如果存在,则继续完成其余信息的修改。
3.删除班级信息:
输入班级编号,系统会自动检查系统中是否存在相同编号的班级信息,如果存在则不可以继续删除,如果不存在,则需要输出提示不存在。
二.学生信息维护:
1.添加学生信息
输入学生学号,系统会自动检查系统中是否存在相同学号的学生信息,如果存在则不可以继续添加,如果不存在,则继续完成其余信息的录入。
2.修改学生信息
输入学生学号,系统会自动检查系统中是否存在相同学号的学生信息,如果不存在则不可以继续修改,如果存在,则继续完成其余信息的修改。
3.删除学生信息
输入学生学号,系统会自动检查系统中是否存在相同编号的学生信息,如果存在则不可以继续删除,如果不存在,则需要输出提示不存在。
三.成绩信息维护:
1.添加成绩信息
输入班级编号,系统会自动检查系统中是否存在相同编号的班级信息,如果存在则输入课程名,系统再次检查是否存在,如果不存在,则继续完成其余信息的录入,如果存在则提示不可重复添加。
2.修改成绩信息
输入学生编号,系统自动检查是否存在此编号,如果不存在则提示编号不存在,如果存在,则继续输入课程名称,系统自动检查是否存在此课程,如果存在则可以完成此课程信息的修改,如果不存在则提示课程信息不存在。
3.删除成绩信息
输入学生编号,系统自动检查是否存在此编号,如果不存在则提示编号不存在,如果存在,则继续输入课程名称,系统自动检查是否存在此课程,如果存在则可以完成此课程信息的删除,如果不存在则提示课程信息不存在。
四.信息查询:
1.班级信息查询
(1)按班级编号查询
输入班级编号,系统自动遍历链表,将编号相同的信息显示输出出来。
(2)按班级导师查询
输入班级导师姓名,系统自动遍历链表,将编号相同的信息显示输出出来。
2.学生信息查询
(1)按学号查询
输入学生学号,系统自动遍历链表,将编号相同的信息显示输出出来。
(2)按限制条件查询
输入分数限制信息,系统自动遍历链表,将编号相同的信息显示输出出来。
3.学生课程成绩信息查询
(1)按学号和课程名查询
输入学生的学号,系统会自动遍历,查询是否存在这个学号的信息,如果不存在则需要提示学号不存在,如果查询到,输入课程名,再子链中查找课程信息,如果查询成功,则输出显示,如果不存在则提示不存在。
(2)按学期和成绩条件查询
输入需要查询的学期,和成绩条件,系统自动在十字链表中查询符合条件的信息并输出。
五.信息统计:
1.按班级统计各班男生和女生数、不及格人数等信息
2.统计某学期某班的成绩情况
3.统计各个课程的基本情况
4.统计各个学期的课程情况
5.统计某学期某课选课人数
五、系统实现
一.班级信息维护:
1.添加班级信息:
输入需要添加的班级编号,系统在链表中检索是否存在输入的班级编号,如果不存在,则可以继续输入完成信息的添加,如果存在则提示班级基本信息已存在。
voidAddClass()
{
charclassNum[10];//班级编号
charclassTeacher[20];//班导师
charTeacherPhone[15];//联系方式
intnCheck=0;
printf("………………………………………………………………………………\n");
printf("请输入班级编号:
\n");
scanf("%s",classNum);
//=========检查班级编号是否存在========
pClassSearch=pClassHead;
while(pClassSearch!
=NULL)
{
if(strcmp(pClassSearch->classNum,classNum)==0)
{
printf("………………………………………………………………………………\n");
printf("|该班级编号已存在|\n");
printf("………………………………………………………………………………\n");
nCheck=1;
break;
}
pClassSearch=pClassSearch->pSNext;
}
if(nCheck==0)
{
printf("请输入班级导师:
\n");
scanf("%s",classTeacher);
printf("请输入联系电话:
\n");
scanf("%s",TeacherPhone);
//========开辟节点=========
pClassToThis=(ClassInfor*)malloc(nClassSize);
strcpy(pClassToThis->classNum,classNum);
strcpy(pClassToThis->classTeacher,classTeacher);
strcpy(pClassToThis->TeacherPhone,TeacherPhone);
pClassToThis->pSNext=NULL;
//=========插入链表中========
if(pClassHead==NULL)
{
pClassHead=pClassToThis;
}
else
{
pClassSearch=pClassHead;
while(pClassSearch!
=NULL)
{
pClassFormer=pClassSearch;
pClassSearch=pClassSearch->pSNext;
}
pClassFormer->pSNext=pClassToThis;
}
printf("………………………………………………………………………………\n");
printf("|信息添加成功|\n");
printf("………………………………………………………………………………\n");
}
}
2.修改班级信息:
输入一个班级编号,系统自动在链表中查找,如果找到则完成信息的修改,如果没找到则提示消息。
voidReviseScore()
{
charStudentNum[12];//学生编号
charClassName[30];//课程名
intnTerm;//开课学期
intnTime;//学时数
floatfScore;//学分
intnScore;//考试成绩
intnSecScore;//补考成绩
intnCheck=0;
intnCheck1=0;
printf("………………………………………………………………………………\n");
printf("请输入需要修改的学生编号:
\n");
scanf("%s",StudentNum);
pStudentSearch=pStudentHead;
while(pStudentSearch!
=NULL)
{
if(strcmp(pStudentSearch->StudentNum,StudentNum)==0)
{
pScoreHead=pStudentSearch->pToScorelist;
printf("请输入需要修改的课程名称:
\n");
scanf("%s",ClassName);
pScoreSearch=pScoreHead;
while(pScoreSearch!
=NULL)
{
if(strcmp(pScoreSearch->ClassName,ClassName)==0)
{
nCheck1=1;
printf("请输入开课学期:
\n");
scanf("%d",&nTerm);
printf("请输入学时数:
\n");
scanf("%d",&nTime);
printf("请输入学分:
\n");
scanf("%f",&fScore);
printf("请输入考试成绩:
\n");
scanf("%d",&nScore);
printf("请输入补考成绩:
(没有填-1)\n");
scanf("%d",&nSecScore);
pScoreSearch->nTerm=nTerm;
pScoreSearch->nTime=nTime;
pScoreSearch->fScore=fScore;
pScoreSearch->nScore=nScore;
pScoreSearch->nSecScore=nSecScore;
printf("………………………………………………………………………………\n");
printf("|信息修改成功|\n");
printf("………………………………………………………………………………\n");
}
pScoreSearch=pScoreSearch->pSNext;
}
if(nCheck1==0)
{
printf("………………………………………………………………………………\n");
printf("|不存在该课程名信息|\n");
printf("………………………………………………………………………………\n");
}
nCheck=1;
}
pStudentSearch=pStudentSearch->pSNext;
}
if(nCheck==0)
{
printf("………………………………………………………………………………\n");
printf("|不存在该学生编号信息|\n");
printf("………………………………………………………………………………\n");
}
}
3.删除班级信息:
输入一个班级编号,系统在链表中检索是否存在,如果存在则删除对应信息,如果不存在则提示信息不存在。
voidDeleteClass()
{
charclassNum[10];//班级编号
charclassTeacher[20];//班导师
charTeacherPhone[15];//联系方式
intnCheck=0;
printf("………………………………………………………………………………\n");
printf("|请输入需要删除的班级编号:
|\n");
scanf("%s",classNum);
pClassSearch=pClassHead;
pClassFormer=pClassHead;
while(pClassSearch!
=NULL)
{
if(strcmp(pClassSearch->classNum,classNum)==0)
{
if(pClassFormer==pClassHead)//如果被查到的节点是第一个节点,pFormer是头指针
{
pClassHead=pClassSearch->pSNext;
}
else
{
pClassFormer->pSNext=pClassSearch->pSNext;//令前一个节点中指向下一个节点的指针直接指向被删除节点的下一个节点,以达到删除该节点的目的
}
free(pClassSearch);
printf("………………………………………………………………………………\n");
printf("|该班级号的信息已删除!
|\n");
printf("………………………………………………………………………………\n");
break;
}
pClassFormer=pClassSearch;//让pFormer指针指向当前的节点,留着下一次用
pClassSearch=pClassSearch->pSNext;//pClassSearch指向下一个节点
}
if(pClassSearch==NULL)
{
//输出
printf("………………………………………………………………………………\n");
printf("|所需删除的信息不存在!
|\n");
printf("………………………………………………………………………………\n");
}
}
二.学生信息维护:
1.添加学生信息
输入需要添加的学生学号,系统在链表中检索是否存在输入的学生学号,如果不存在,则可以继续输入完成信息的添加,如果存在则提示学生基本信息已存在。
voidAddStudent()
{
charClassNum[10];//班级编号
charStudentNum[12];//学生编号
charStudentName[20];//学生姓名
charcStudentSex[10];//学生性别
floatfSumScore;//已修课程学分
floatfGetScore;//已获学分
floatfAveScore;//加权平均分
intnCheck=0;
printf("………………………………………………………………………………\n");
printf("请输入班级编号:
\n");
scanf("%s",ClassNum);
printf("请输入学生学号:
\n");
scanf("%s",StudentNum);
//=========检查班级编号是否存在========
pStudentSearch=pStudentHead;
while(pStudentSearch!
=NULL)
{
if(strcmp(pStudentSearch->StudentNum,StudentNum)==0)
{
nCheck=1;
break;
}
}
if(nCheck==0)
{
printf("请输入学生姓名:
\n");
scanf("%s",StudentName);
printf("请输入学生性别:
(男:
m女:
f)\n");
scanf("%s",cStudentSex);
//========开辟节点=========
pStudentToThis=(StudentInfor*)malloc(nStudentSize);
strcpy(pStudentToThis->ClassNum,ClassNum);
strcpy(pStudentToThis->StudentNum,StudentNum);
strcpy(pStudentToThis->StudentName,StudentName);
pStudentToThis->cStudentSex=cStudentSex[0];
pStudentToThis->fAveScore=0;
pStudentToThis->fGetScore=0;
pStudentToThis->fSumScore=0;
pStudentToThis->pSNext=NULL;
pStudentToThis->pToScorelist=NULL;
//=========插入链表中========
if(pStudentHead==NULL)
{
pStudentHead=pStudentToThis;
}
else
{
pStudentSearch=pStudentHead;
while(pStudentSearch!
=NULL)
{
pStudentFormer=pStudentSearch;
pStudentSearch=pStudentSearch->pSNext;
}
pStudentFormer->pSNext=pStudentToThis;
}
printf("………………………………………………………………………………\n");
printf("|信息添加成功|\n");
printf("………………………………………………………………………………\n");
}
}
2.修改学生信息
输入一个学生学号,系统在链表中查找对应信息,如果存在则完成修改,如果不存在,则提示信息不存在。
voidReviseStudent()
{
charClassNum[10];//班级编号
charStudentNum[12];//学生编号
charStudentName[20];//学生姓名
charcStudentSex[10];//学生性别
floatfSumScore;//已修课程学分
floatfGetScore;//已获学分
floatfAveScore;//加权平均分
//输入需要修改的信息
printf("………………………………………………………………………………\n");
printf("|请输入需要修改的学生学号:
|\n");
scanf("%s",&StudentNum);
pStudentSearch=pStudentHead;
while(pStudentSearch!
=NULL)
{
//如果匹配的话,则重新输入各个信息
if(strcmp(pStudentSearch->StudentNum,StudentNum)==0)
{
printf("|请输入学生姓名:
\n");
scanf("%s",StudentName);//输入消息
printf("|请输入学生班级号:
\n");
scanf("%s",ClassNum);
printf("|请输入学生性别:
(男:
m女:
f)\n");
scanf("%s",cStudentSex);//输入消息
printf("|请输入已修课程学分:
\n");
scanf("%f",&fSumScore);//输入消息
printf("|请输入已获学分:
\n");
scanf("%f",&fGetScore);//输入消息
printf("|请输入加权平均分:
\n");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 报告