c程序设计大作业(范例)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书
《C 程序设计大作业》 ——学生成绩管理系统
班 级: 电信2009级集成班 学 生: 陈颖宏 学 号: ************ 序 号: 提交日期: 2010 年 3 月 27 日
成绩评定:
分 任课教师签名: 年
月 日
前言
本课程设计题目是“学生成绩管理系统设计”,其内容是设计一个使用二进制文件方式存储数据,并且以菜单方式工作的管理系统。
设计目的是设计一个能够方便、直观地管理学生相关信息的系统。
该系统可以实现以下功能:
○1能按学期、按班级完成对学生成绩的录入、修改;
○2能按班级统计显示的成绩,计算学生的总分及平均分;
○3能查询学生的成绩,不及格科目及学生名单;
○4能按班级输出学生的成绩单。
正文
1.需求分析:本程序主要用于输入、查询、统计、导入以及导出学生的成绩。主要的输入方式是利用键盘输入,且输入的字符最好是英文及数字,输入中文时有时会出现错误。程序的有效窗口大小一般为半个屏幕,以至于有些功能的版面出现显示方面的错误。
经测试,程序基本可以正常工作:当在主菜单输入“1”时,可以正常初始化,输入余下的菜单选项时也能按要求跳转到指定画面;各子菜单选项也都能正常运行;但是输入班级、姓名等字符时,有时会显示错误的字符。
2概要设计
○1抽象数据类型的定义:学生结构体定义为struct stu,变量为student;学期数组定义为char term[7]; 班别数组定义为char banbie[20]; 学号数组定义为char no[15]; 姓名数组定义为char name[20]; 科目数组定义为int score[MAXSUB]; 总成绩变量定义为int sum; 平均成绩变量定义为float average。
○2抽象函数类型的定义:菜单选择程序“menu_select()”为int型; 初始化函数“initialize(student * [])”为void型;数据输入函数“input(student * [])”为void型;数据编辑函数“editmenu(student * [])”为void型; 数据查询查询函数“searchmenu(student * [])”为void型; 数据统计函数“total(student * [])”为void型; 数据导出函数“save(student * [])”为void型;数据导入函数“load(student * [])”为void型; 数据导出函数“output(student * [])”为void型;添加学生记录函数“add_record(student * [])”为void型;删除学生记录“delete_record(student * [])”为void型;
修改学生记录函数“student * edit_record(student * [])”为void型;按学号查询函数“student * no_search(student * [])”为void型; 按姓名查询函数“student * name_search(student * [])”为void型。
○3主程序的流程如Main()函数流:○4各程序模块之间的层次(调程图用)关系图:
3详细设计
○1各个操作及模块的伪代码:
Main()函数的伪代码算法:
printf("欢迎使用学生成绩管理系统(请按回车键!)......\n");
for(;;)
{
switch(menu_select())
{
选择选项1:
初始化;
break;
主函数:main.c
自定义函数:student.c 调用
调
用
头文件:student.h
选择选项2:
数据录入;
break;
选择选项3:
数据编辑;
break;
选择选项4:
数据统计;
break;
选择选项5:
数据查询;
break;
选择选项6:
数据导出;
break;
选择选项7:
数据显示;
数据导出;
printf("导出成功!\n")
break;
选择选项0:
printf("\n\n\n\n\t\t\t\t^_^感谢您使用本系统!\n");
退出系统;
}
}
退出应用程序;
初始化函数的伪代码:
查找每一个学生记录
{
初始化当前学生记录为空记录
}
printf("记录已经初始化!\n按任意键继续!");
结束初始化函数并返回主菜单;
数据录入函数的伪代码:
对学生信息数组中的每条记录进行循环
{
为数组stuArray[i]分配内存;
如果数组stuArray[i]为空;
{
printf("分配内存失败!");
return;
}
do
{
printf("目前容量可以存储%d条记录,继续请输入y or Y,返回请输入n or N!\n",MAXNUM-i);
接受输入字符;
如果输入字符为'y'或'Y'break;
如果输入字符为'n'或'N'return;
else printf("输入错误!请重新输入\n");
}while输入字符不为'y'、'Y'、'n'、'N'中的一个;
printf("请输入需要录入的班级:");
接收输入的班别;
printf("请输入学期(如08-09-1表示08-09学年第一学期):");
接收输入的学期;
printf("请输入第%d位同学学号(共12位):",i+1);
接收输入的学号;
printf("请输入第%d位同学姓名:",i+1);
接收输入的姓名;
printf("请输入%d门成绩\n",MAXSUB);
for(j=0;j { do {printf("课程%d成绩(语文为1,数学为2,英语为3,计算机为4)",j+1); 接收成绩; 刷新内存缓冲区; 检查输入的成绩是否在要求范围内; { printf("错误数据!请重新输入\n");; } }while输入的成绩不在要求范围内; 临时统计总成绩; 保存当前学生的总成绩; 算出当前学生的平均成绩; } } 结束函数return; 编辑函数的伪代码: do { printf("\n\t请输入菜单项数字(1~4):"); 接受输入选项; }while选项不在范围内; switch(menuitem) {