《C语言程序设计》课程设计基础部分任务书计科08.docx
- 文档编号:11203480
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:84
- 大小:85.91KB
《C语言程序设计》课程设计基础部分任务书计科08.docx
《《C语言程序设计》课程设计基础部分任务书计科08.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》课程设计基础部分任务书计科08.docx(84页珍藏版)》请在冰点文库上搜索。
《C语言程序设计》课程设计基础部分任务书计科08
华中科技大学计算机科学与技术学院
《C语言程序设计》
课程设计基础部分任务书
年级:
2014级
专业:
计算机科学与技术
班级:
计科201408班
指导教师:
王多强
时间:
2015年6月18日
一、题目及选题规定
1.题目设置
三题,选做其一:
(1)学生成绩信息管理系统
(2)教师教学信息管理系统
(3)教室排课信息管理系统
二、设计说明
(一)学生成绩信息管理系统
1.需要处理的基础数据
对计算机学院1-4年级各班学生成绩信息进行管理。
主要包括:
班级信息、学生基本信息、学生课程成绩基本信息三类信息。
一个年级包含多个班级,一个班级包含多个学生,一个学生有多门课程成绩信息。
(1)班级信息(仅供参考,不限于以下设计):
中文字段名
类型及长度
举例
班级编号
char[10]
EE201401
班导师
char[20]
王多强
联系电话
char[15]
189xxxxxxxx
(2)学生基本信息(仅供参考,不限于以下设计):
中文字段名
类型及长度
举例
班级编号
char[10]
EE201401
学号
char[12]
U201412345
姓名
char[20]
张三
性别
char
m//m:
表示男f:
表示女
已修课程学分
float
44.5//本项及后两项不需录入
已获学分
float
39.0//而是计算后填入
加权平均分
float
78.33//保留两位小数
(3)学生课程成绩基本信息(仅供参考,不限于以下设计):
中文字段名
类型及长度
举例
学号
char[12]
U201412345
课程名
char[30]
C语言程序设计
开课学期
int
1//1-8学期
学时数
int
88
学分
float
5.5
考试成绩
int
56
补考成绩
int
65
附加说明:
设计时,也可以考虑将学生课程成绩基本信息表中与课程相关的信息,如课程名、开课学期、学时数、学分,另外保存到数据文件courseinfo.txt,程序执行时将该文件中的课程相关信息加载到一个链表(或数组),供数据维护、数据查询和数据统计时使用。
如果采用这种设计,学生课程成绩基本信息表中可只保留课程名称,而开课学期、学时数、学分这些项不用在本表录入。
2.系统基本功能
1)数据维护
本模块实现班级信息、学生基本信息、学生课程成绩基本信息等三方面信息的数据维护功能,又分为三个子模块。
(1)班级信息维护
包括对班级信息的录入、修改和删除等功能。
(2)学生基本信息维护
包括对学生基本信息的录入、修改和删除等功能。
(3)学生课程成绩基本信息维护
包括对学生课程成绩基本信息的录入、修改和删除等功能。
2)数据查询
本模块实现班级信息、学生基本信息、学生课程成绩基本信息等三方面信息的数据查询功能,又分为三个子模块。
(1)班级信息查询
实现两个功能。
①以班级编号为条件来查找并显示满足条件的班级信息。
例如,查找并显示班级编号为“EE201401”的班级信息。
②以班导师为条件来查找并显示满足条件的班级信息。
例如,查找并显示班导师为“王多强”的班级信息。
(2)学生基本信息查询
实现两个功能。
①以学号为条件查找并显示满足条件的学生基本信息。
例如,查找并显示学号为“U201412345”的学生基本信息。
②以已修课程学分、已获学分和加权平均分为条件,查找并显示满足条件的学生基本信息。
例如,查找并显示已修课程学分大于60、已获学分大于50、加权平均分大于60且小于80的所有学生基本信息。
(3)学生课程成绩基本信息查询
实现两个功能。
①以学号和课程名为条件查找并显示满足条件的学生课程成绩基本信息。
例如,查找并显示学号为“U201412345”且课程名为“C语言程序设计”的学生课程成绩基本信息。
②以开课学期和考试成绩为条件查找并显示满足条件的学生课程成绩基本信息。
例如,查找并显示开课学期为1且考试成绩小于60的所有学生课程成绩基本信息。
3)数据统计
本模块实现五个方面的数据统计功能,前四个功能需求已给出,第五个自行设计。
(1)按班级统计各班男生和女生数、不及格人数、不及格比例、班级平均加权平均分(全体学生的加权平均分之和除以班级人数),按班级平均加权平均分降序排序后输出统计结果。
(输出样式仅供参考,不限于以下设计)
班级
男生人数
女生人数
不及格人数
不及格比例
平均加权平均分
EE201401
27
3
1
3.33%
85.69
IOT201402
28
1
2
7.00%
84.32
……
(2)以输入的班级编号和学期(1-8)为条件,统计该班这一学期内各位学生各门课程的考试成绩,按所有课程平均成绩降序排序后,输出名次、姓名、课程1、课程2、……、平均成绩等统计结果。
班级:
EE201401学期:
1(输出样式仅供参考,不限于以下设计)
名次
用户名
课程1
课程2
……
平均成绩
1
张三
98
89
……
92.3
2
李四
92
94
……
91.8
……
(3)按课程统计各分数段人数,计算该课程平均分和及格率,按及格率降序排序后,输出课程名称、[90,100]人数、[80,90)人数、[60,80)人数、[0,60)人数、平均分、及格率等统计结果。
(输出样式仅供参考,不限于以下设计)
课程
90-100
80-89
60-79
0-59
平均分
及格率
C语言程序设计
77
216
163
12
83.7
97.44%
综合英语
(一)
83
212
159
14
82.3
97.01%
……
(4)按学期统计1-8学期开课门数、总学时数、总学分数、不及格人数。
(输出样式仅供参考,不限于以下设计)
学期
开课门数
总学时数
总学分数
不及格人数
第1学期
10
450
28.5
123
第2学期
12
522
32.5
166
……
……
……
……
……
第8学期
5
264
18
61
(5)有关学生成绩其他方面的数据统计。
自行设计至少一项统计功能。
3.数据结构说明及举例
数据结构可以采用三个方向的十字链表(图1)或两个方向的十字链表(图2)来处理,相应的难度系数有所不同。
图1学生成绩信息管理系统三个方向的十字交叉链表
图2学生成绩信息管理系统两个方向的十字交叉链表
三、难度选择的规定
1.数据结构
选三个方向的十字交叉链表数据结构的难度系数为1;选二个方向十字交叉链表数据结构的难度系数为0.85。
2.界面
采用文本菜单界面的难度系数为1;采用简易菜单的难度系数为0.75;采用MFC等生成菜单难度系数为0.50(有特殊设计的除外)。
请每个同学根据实际掌握程度和能力选择相应难度系数的题,要求独立完成。
注:
难度系数的影响是,计算综合成绩时,相应项目分值乘以难度系数后再计入总评分数。
四、要求
1.只能使用C语言来实现,源程序要有适当的注释,使程序容易阅读。
2.以上设计说明中列出的内容,仅作为实际工作的参考。
可以在此基础上补充完善,但至少完成设计说明中提出的功能,要保证有足够的工作量和完成质量。
3.要有用户界面。
要求至少采用简易菜单;鼓励采用文本菜单界面甚至采用图形菜单界面。
4.必须使用结构和十字交叉链表等数据结构。
5.使用文件保存数据。
6.至少输出一份报表(屏幕输出即可),鼓励自行增加新功能。
7.写课程设计报告(要求打印,A4幅面),内容格式见附件《C语言课程设计报告_模板》。
8.凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩并向学院报告。
凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩并向学院报告。
五、参考书目
《C语言实验与课程设计》
六、评分标准(百分制,难度系数为1)
课程设计的评分分三个部分:
1.上机演示占40%(40分)
其中功能演示占本部分的70%(28分),回答问题占本部分的30%(12分)。
2.课程设计报告占40%(40分)
其中报告占本部分的70%(28分),源程序清单占本部分的30%(12分,程序要有注释,编程风格要好)。
3.程序结构和风格占20%(20分)
其中数据结构(如是否用十字交叉链表)以及代码的简洁性占本部分的50%(10分),程序注释占本部分的50%(10分)。
七、如何做?
1.需求分析
对你选做的课题,结合现实之中的应用认真思考,从中总结出该系统要管理什么数据、怎么管、提供什么功能为使用者使用、实现方法和技术等相关问题,形成需求分析报告。
需求分析是后续设计的重要依据。
2.数据结构设计
对系统管理的数据对象进行认真研究,得出其属性和组织结构,根据设计说明中的说明,利用结构和十字链表设计其数据结构及保存的文件格式。
3.功能设计
对系统功能进行认真分析,参照设计说明,设计出相应的功能模块。
画出系统模块结构图和各功能模块的流程图,特别要明确数据在各个模块中是怎么被使用的,以及数据在各模块之间是怎么交流变换的。
4.熟悉菜单界面
参考《C语言实验与课程设计》,着重分析文本菜单界面结构和应用接口,以便于把你设计的功能加入到系统框架中。
5.软件按开发
暑假期间完成,在前期准备工作完成比较好的前提下,软件开发工作量预计2-3周,各人安排好时间。
开学第一周即开始检查。
6.书写报告
务必按照格式规范的要求认真书写报告。
课程设计报告中要反映出你的实际工作,包括:
需求分析、功能模块设计、数据结构设计、开发技术描述、成果展示等。
在软件按时完成的前提下,报告书写时间大约2周。
(1)在描述设计内容时,要给出一定的设计依据,说明为什么设计此项功能,并详细介绍如何设计该功能的,用文字、流程图、关键程序代码等方式展示设计内容。
(2)开发技术描述要给出系统实现中一些重要功能的实现方法和技术,说明对于一些技术要点和难点你是如何解决的。
(3)成果展示要有比较丰富的截屏和数据分析来说明你的设计成果,要真实、具体。
(4)源程序清单仅作为报告的附录提供,关于需求分析、功能模块设计、数据结构设计、开发技术及成果的说明,不要用大段的源代码,而应用文字、图表予以描述。
#include"dorm.h"
unsignedlongul;
intmain()
{
COORDsize={SCR_COL,SCR_ROW};/*窗口缓冲区大小*/
gh_std_out=GetStdHandle(STD_OUTPUT_HANDLE);/*获取标准输出设备句柄*/
gh_std_in=GetStdHandle(STD_INPUT_HANDLE);/*获取标准输入设备句柄*/
SetConsoleTitle(gp_sys_name);/*设置窗口标题*/
SetConsoleScreenBufferSize(gh_std_out,size);/*设置窗口缓冲区大小80*25*/
LoadData();/*数据加载*/
InitInterface();/*界面初始化*/
RunSys(&gp_head);/*系统功能模块的选择及运行*/
CloseSys(gp_head);/*退出系统*/
return0;
}
/**
*函数名称:
LoadData
*函数功能:
将代码表和三类基础数据从数据文件载入到内存缓冲区和十字链表中.
*输入参数:
无
*输出参数:
无
*返回值:
BOOL类型,功能函数中除了函数ExitSys的返回值可以为FALSE外,
*其他函数的返回值必须为TRUE.
*
*调用说明:
为了能够以统一的方式调用各功能函数,将这些功能函数的原型设为
*一致,即无参数且返回值为BOOL.返回值为FALSE时,结束程序运行.
*/
BOOLLoadData()
{
intRe=0;
if(gp_sex_code!
=NULL)
{
free(gp_sex_code);
}
gul_sex_code_len=LoadCode(gp_sex_code_filename,&gp_sex_code);
if(gul_sex_code_len<3)
{
printf("性别代码表加载失败!
\n");
gc_sys_state&=0xfe;
}
else
{
printf("性别代码表加载成功!
\n");
gc_sys_state|=1;
}
if(gp_type_code!
=NULL)
{
free(gp_type_code);
}
gul_type_code_len=LoadCode(gp_type_code_filename,&gp_type_code);
if(gul_type_code_len<4)
{
printf("学生类别代码表加载失败!
\n");
gc_sys_state&=~2;
}
else
{
printf("学生类别代码表加载成功!
\n");
gc_sys_state|=2;
}
Re=CreatList(&gp_head);
gc_sys_state|=Re;
gc_sys_state&=~(4+8+16-Re);
if(gc_sys_state<(1|2|4|8|16))
{/*数据加载提示信息*/
printf("\n系统基础数据不完整!
\n");
printf("\n按任意键继续...\n");
getch();
}
returnTRUE;
}
/**
*函数名称:
LoadCode
*函数功能:
将代码表从数据文件载入到内存缓冲区,并进行排序和去除空格.
*输入参数:
FileName存放代码表的数据文件名.
*输出参数:
pBuffer指向内存缓冲区的指针变量的地址.
*返回值:
存放代码表的内存缓冲区大小(以字节为单位).
*
*调用说明:
*/
intLoadCode(char*FileName,char**pBuffer)
{
char*pTemp,*pStr1,*pStr2;
inthandle;
intBufferLen,len,loc1,loc2,i;
longfilelen;
if((handle=open(FileName,O_RDONLY|O_TEXT))==-1)/*如果以只读方式打开失败*/
{
handle=open(FileName,O_CREAT|O_TEXT,S_IREAD);/*以创建方式打开*/
}
filelen=filelength(handle);/*数据文件的长度*/
pTemp=(char*)calloc(filelen+1,sizeof(char));/*申请同样大小的动态存储区*/
BufferLen=read(handle,pTemp,filelen);/*将数据文件的内容全部读入到内存*/
close(handle);
*(pTemp+BufferLen)='\0';/*在动态存储区尾存一个空字符,作为字符串结束标志*/
BufferLen++;
for(i=0;i { if(*(pTemp+i)=='\n') { *(pTemp+i)='\0'; } } /*再申请一块同样大小的动态存储区,用于存放排序后的代码串*/ *pBuffer=(char*)calloc(BufferLen,sizeof(char)); loc2=0; pStr1=pTemp; len=strlen(pStr1); while(BufferLen>len+1)/*选择法排序*/ { loc1=len+1; while(BufferLen>loc1)/*每趟找到序列中最小代码串,首地址存入pStr1*/ { pStr2=pTemp+loc1; if(strcmp(pStr1,pStr2)>0) { pStr1=pStr2; } loc1+=strlen(pStr2)+1; } len=strlen(pStr1);/*这一趟所找到的最小代码串长度*/ /*如果不是空串,则进行复制,loc2是下一个最小代码串存放地址的偏移量*/ if(len>0) { strcpy(*pBuffer+loc2,pStr1); loc2+=len+1;/*已复制的代码串所占存储空间大小*/ } /*将最小代码串从序列中删除掉*/ for(i=0;i { *(pStr1+i)=*(pStr1+i+len+1); } BufferLen-=len+1;/*下一趟排序所处理序列的长度*/ pStr1=pTemp;/*假定序列的第一个代码串为最小代码串*/ len=strlen(pStr1); }/*序列中只剩下一个代码串时,排序结束*/ /*复制最后这个代码串*/ len=strlen(pStr1); strcpy(*pBuffer+loc2,pStr1); /*修改动态存储区大小,使其正好放下排序后代码串*/ loc2+=len+1; *pBuffer=(char*)realloc(*pBuffer,loc2); free(pTemp);/*释放最先申请的动态存储区*/ returnloc2;/*返回存放代码串的内存缓冲区实际大小*/ } /** *函数名称: CreatList *函数功能: 从数据文件读取基础数据,并存放到所创建的十字链表中. *输入参数: 无 *输出参数: phead主链头指针的地址,用来返回所创建的十字链. *返回值: int型数值,表示链表创建的情况. *0空链,无数据 *4已加载宿舍楼信息数据,无学生基本信息和缴费信息数据 *12已加载宿舍楼信息和学生基本信息数据,无缴费信息数据 *28三类基础数据都已加载 * *调用说明: */ intCreatList(DORM_NODE**phead) { DORM_NODE*hd=NULL,*pDormNode,tmp1; STU_NODE*pStuNode,tmp2; CHARGE_NODE*pChargeNode,tmp3; FILE*pFile; intfind; intre=0; if((pFile=fopen(gp_dorm_info_filename,"rb"))==NULL) { printf("宿舍楼信息数据文件打开失败! \n"); returnre; } printf("宿舍楼信息数据文件打开成功! \n"); /*从数据文件中读宿舍楼信息数据,存入以后进先出方式建立的主链中*/ while(fread(&tmp1,sizeof(DORM_NODE),1,pFile)==1) { pDormNode=(DORM_NODE*)malloc(sizeof(DORM_NODE)); *pDormNode=tmp1; pDormNode->snext=NULL; pDormNode->next=hd; hd=pDormNode; } fclose(pFile); if(hd==NULL) { printf("宿舍楼信息数据文件加载失败! \n"); returnre; } printf("宿舍楼信息数据文件加载成功! \n"); *phead=hd; re+=4; if((pFile=fopen(gp_stu_info_filename,"rb"))==NULL) { printf("学生基本信息数据文件打开失败! \n"); returnre; } printf("学生基本信息数据文件打开成功! \n"); re+=8; /*从数据文件中读取学生基本信息数据,存入主链对应结点的学生基本信息支链中*/ while(fread(&tmp2,sizeof(STU_NODE),1,pFile)==1) { /*创建结点,存放从数据文件中读出的学生基本信息*/ pStuNode=(STU_NODE*)malloc(sizeof(STU_NODE)); *pStuNode=tmp2; pStuNode->cnext=NULL; /*在主链上查找该学生所住宿舍楼对应的主链结点*/ pDormNode=hd; while(pDormNode! =NULL &&strcmp(pDormNode->dorm_id,pStuNode->dorm_id)! =0) { pDormNode=pDormNode->next; } if(pDormNode! =NULL)/*如果找到,则将结点以后进先出方式插入学生信息支链*/ { pStuNode->next=pDormNode->snext; pDormNode->snext=pStuNode; } else/*如果未找到,则释放所创建结点的内存空间*/ { free(pStuNode); } } fclose(pFile); if((pFile=fopen(gp_charge_info_filename,"rb"))==NULL) { printf("住宿缴费信息数据文件打开失败! \n"); returnre; } printf("住宿缴费信息数据文件打开成功! \n"); re+=16; /*从数据文件中读取学生缴费信息数据,存入学生基本信息支链对应结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 课程设计 基础 部分 任务书 08