《程序设计综合训练》指导书Word文件下载.docx
《《程序设计综合训练》指导书Word文件下载.docx》由会员分享,可在线阅读,更多相关《《程序设计综合训练》指导书Word文件下载.docx(23页珍藏版)》请在冰豆网上搜索。
1.4综合训练提交材料
●电子版的所有.c文件、.h文件和电子稿的综合训练报告。
文件放在建立的文件夹中,文件夹统一命名:
学号_姓名,通过网络课堂提交。
●综合训练报告内容包括:
(1)课题设计内容、具备的功能;
(2)模块(函数)的划分、各模块(函数)的功能(用Visio画出功能模块图);
(3)采用的自定义的数据类型;
(4)程序设计过程、调试中过程中所用的测试用例、程序运行的结果(用Visio画出主流程图);
(5)在综合训练中遇到的问题和解决的方法,还没有能解决的问题;
(6)通过综合训练的体会、收获。
●综合训练报告要求:
所用的纸张大小统一为A4幅面;
设计完毕后应装订成册,封面用学院编制综合训练统一封面,封面内容完整准确填写,报告格式见撰写规范。
1.5基本要求
(1)综合训练采取每人一题,可任选一题进行设计;
(2)可以选择老师提供的参考选题,也可以自选,如果自选,将自选题目的详细内容以及实现要求跟老师交流,老师同意后可采用。
(3)要求利用结构化程序设计方法以及C语言的编程思想来完成系统的设计。
(4)要求有欢迎界面、菜单、文件操作、数据使用数组、结构体、链表均可,键盘操作或鼠标操作均可。
(5)模块化程序设计:
要求在设计的过程中,按功能定义函数或书写多个文件,进行模块化设计、各个功能模块用函数的形式来实现。
(6)学生所选课题必须上机通过,并获得满意的结果。
(7)程序书写风格:
锯齿形书写格式。
1.6教学安排
综合训练属于研究型、创新型、自主型学习。
学生可以根据自己的兴趣、爱好、特长,或者以前已经接触过的内容,自行确定综合训练课题。
也可完成老师提供的参考课题。
具体安排如下:
1.讲解分析任务、明确要求(1学时)
2.确定课题(1学时)
3.查阅资料(4学时)
4.自学相关知识(4学时)
5.制定方案(8学时)
6.程序设计(18学时)
7.测试,运行,回答老师提出的问题(2学时)
8.撰写综合训练文档,提交综合训练报告及软件(2学时)
1.7考核办法标准
优:
按要求完成所有选题任务,有完整的符合标准的文档,文档有条理、文笔通顺,格式正确,其中有总体设计思想的论述,有正确的流程图,程序完全实现设计方案,设计方案先进,软件可靠性好;
良:
完成80%以上选题任务,有完整的符合标准的文档,文档有条理、文笔通顺,格式正确;
有完全实现设计方案的软件,设计方案较先进;
中:
完成60%以上选题任务,有完整的符合标准的文档,有基本实现设计方案的软件,设计方案正确;
及格:
完成50%以上选题任务,有完整的符合标准的文档,有基本实现设计方案的软件,设计方案基本正确;
不及格:
完成的题目数不到4题,没有完整的符合标准的文档,软件没有基本实现设计方案,设计方案不正确。
)
对于不能按时完成综合训练报告的同学,一律不予给定成绩,不能给予相关学分。
本次综合训练报告必须独立完成。
如发现纯属抄袭他们设计方案者一律不予评定为不及格。
第二章综合训练参考课题
2.1学生成绩管理系统
2.1.1参考课题内容及知识点
“学生成绩管理系统”通过建立、修改、删除、查询、排序、显示学生成绩等信息功能,具体要求掌握的技术有:
(1)结构、枚举类型的定义与使用;
(2)数组的定义使用;
(3)程序的三种基本控制流程的综合、灵活运用;
(4)普通指针和数组指针的定义和使用;
(5)各类函数的定义和调用;
(6)文件的输入/输出;
(7)程序的调试。
2.1.2功能要求
每个学生的信息为:
学号、姓名、性别、联系电话、语文、数学、外语三门单科成绩,考试平均成绩。
学生信息处理:
(1)新增学生信息。
输入学号、姓名、联系电话,三门功课成绩,计算总成绩并显示,同时按输入顺序存入文件中。
(提示:
先把学生信息读入数组,然后按提示输入每科成绩,计算平均成绩,平均成绩=(语文+数学+外语)/3,计算平均成绩最后把学生记录写入一个文件中)
(2)插入(修改)学生信息。
要求学号不重复,若学号已经存在,让重新输入,无重复学号则将插入的学生其他信息输入,计算总成绩并显示,把该记录插入数组,然后把插入后信息写入文件中)
(3)删除学生信息。
输入学号,根据学号删除该学生信息。
输入将删除学生学号,读出该学生信息,要求对此进行确认,以决定是否删除,若是则删除该学生信息并把删除后的信息写入文件中)
(4)显示全部学生信息。
打开文件,显示该文件的学生信息)
(5)根据学号查询学生信息:
输入学号,查找该生并显示学生数据。
输入要查询的学生学号,若存在,读出该学生信息,否则,给出提示信息,无此记录)
(6)学生信息排序:
一、根据学号排序学生数据。
学生信息可先在数组中排序,排序后再写到文件中。
)二、根据总成绩排序学生数据。
(7)备份学生信息。
要求输入文件名,按此文件名建立文件,并把所有学生信息写入该文件)
(8)退出。
结束程序运行。
(9)密码设置。
密码正确可使用系统,错误三次不让使用系统,为保证密码的安全,可对密码进行加密,加密算法自行设计。
设置密码成功后密码加密写入文件,核对密码时读取并解密)
2.1.3设计要求
(1)在TurboC3.0或VisualC++控制台应用程序方式下设计课题。
(2)系统必须提供简单、易操作的人机界面。
(3)程序应具有一定的健壮性。
即程序必须具有必要的检查和出错处理,如在新增学生数据时检查输入的学号是否相同;
修改数据时,保证数据学号不重复,删除、查询学生时检查输入的学号是否存在等。
(4)设计的程序要求完成2.1.2节
(1)-(8)规定的功能。
(5)选做2.1.2(9)。
2.1.4参考课题部分设计
1)设计student结构类型,成员为
charno[5]学号
charname[8]姓名
chargender[2]性别
intscore[4]3门课程成绩及总成绩
3)设计下列函数
voidinit();
//初始化,文件不存在,则建立,同时记录下文件中的记录数
intget_menu_choice()//接受菜单选择
voidmenu()//菜单响应
voidshow_menu();
//显示菜单
FILE*file_operate(char*mode);
//文件操作
voidDelete(FILE*fp);
//删除记录
voidAlter(FILE*fp);
//修改记录信息
voidShow();
//显示打印所有的信息
voidSave();
//备份信息到文件
voidFind();
//查找记录的函数
voidSort();
//按学号从小到大选择排序,并显示,存盘
voidInput(FILE*fp);
//向通讯录中增加记录
intInputoneperson(inti);
//向数组增加一条记录
voidset_psw();
//设置密码
voidpsw_check()//密码验证
//下面函数为了简化部分工作从上面函数中划分出来的功能
voidexchange(inti,intj);
//交换两个人的所有信息
voidPrintTitle();
//打印头信息
voidclear();
//清屏
voidShowoneperson(inti);
//显示打印一个人的信息
intCheckNumber(char*pNumber,int);
//检查学号是否存在,存在返回序号,不存在返回-1
voidInputfile(inti,FILE*fp);
//把下标为i的记录写入文件
voidReadfile(inti,FILE*fp);
//读一条记录从文件
4)设计主函数main(),运行后,屏幕显示功能菜单
**************************************************
1.显示数据|2.删除数据
3.查询数据|4.输入数据
5.修改数据|6.备份数据
7.设置口令|8.数据排序
0.退出
用户输入选择后,程序运行相应的处理函数Show()、Delete(FILE*fp)、Find()、Input(FILE*fp)、Alter(FILE*fp)、Save()、set_psw()、Sort()。
其中参数为FILE*fp的该模块有数据改动,数据改动后及时写入文件。
运行主函数main(),调用Init()函数,从文件student.txt中读取学生数据,得到信息总数total(全局变量)。
然后等待用户输入选项,进行相应处理。
设计除main()主函数、Init()函数、menu()、Show_menu()、get_menu_choice()、clear()、Input(FILE*fp)、Inputoneperson(inti)、FILE*file_operate(char*mode)、CheckNumber(char*pNumber,intj)、Show()、Showoneperson(inti)、Readfile(inti,FILE*fp)函数之外的其他函数。
2.1.5参考课题部分源程序
#include"
stdio.h"
stdlib.h"
string.h"
#defineMAX500
#defineM3//课程门数
structStudent//学生记录结构
{
charno[10];
//学号
charname[10];
//姓名
chargender[4];
//性别
intscore[M+1];
//三门功课,score[M]为总成绩
};
inttotal;
//记录人数
structStudentstudents[MAX];
//定义students[MAX]为全局变量
/************************************************************/
voidInit();
//初始化,文件不存在,则建立文件
//按编号从小到大选择排序,并显示存盘
intget_menu_choice();
//接受菜单选择
voidShow_menu();
voidmenu();
//菜单响应
//修改一条记录信息
//删除一条记录
//显示打印所有的信息
//保存信息到文件
//查找记录的函数
//输入的编号是否重复
//设置密码
voidpsw_check();
//密码验证
//把下标为i的记录写入文件
//读一条记录从文件
/***********************************************************/
voidShow_menu()
printf("
\n\n"
);
\t欢迎使用通讯录\n"
\t**************************************************\n"
\t1.显示数据|2.删除数据\n"
\t3.查询数据|4.输入数据\n"
\t5.修改数据|6.备份数据\n"
\t7.设置口令|8.数据排序\n"
\t0.退出\n"
}
intget_menu_choice()//接受菜单选择
intsel;
do
{
printf("
\nPleaseInputYourChoice(0-8):
"
scanf("
%d"
&
sel);
if(sel<
0||sel>
8)
puts("
Inputerror,PleaseInputYourChoice(0-8):
}while(sel<
8);
returnsel;
voidclear()//清屏
system("
pause"
cls"
voidPrintTitle()//显示表头
---------------------------------------------------------"
//学生设计
voidInit()//文件不存在,则建立文件
inti;
FILE*fp;
total=0;
if((fp=fopen("
student.txt"
"
rb"
))==NULL)//打开文件失败,表示文件不存在
fp=fopen("
a"
//新建文件
menu();
//调用菜单
}
else//如果原来文件存在了
for(i=0;
feof(fp)==0;
i++)//获取总人数
Readfile(i,fp);
total=i;
//总人数
fclose(fp);
FILE*file_operate(char*mode)//文件操作
charchoice;
fflush(stdin);
if((fp=fopen("
mode))==NULL)
{
Fileoperationfailure."
Tryagain(y/n)?
scanf("
%c"
choice);
}
}while(choice=='
y'
||choice=='
Y'
if(choice=='
n'
N'
exit
(1);
//出现异常退出
return(fp);
voidShowoneperson(inti)//显示一条记录
intj;
%s"
students[i].no);
\t%s"
students[i].name);
students[i].gender);
for(j=0;
j<
M+1;
j++)
\t%d"
students[i].score[j]);
\n"
voidShow()//显示所有记录
There%dRecord:
total);
PrintTitle();
for(i=0;
i<
total;
i++)
Showoneperson(i);
voidmenu()
while
(1)
Show_menu();
switch(get_menu_choice())
{
case1:
Show();
clear();
break;
case2:
Delete(file_operate("
r"
));
case3:
Find();
case4:
Input(file_operate("
//增补,如果文件不存在则创建一个
case5:
Alter(file_operate("
case6:
Save();
case7:
set_psw();
case8:
Sort();
case0:
printf("
欢迎你使用本程序!
exit(0);
//程序正常退出
intCheckNumber(char*pNumber,intj)
i++)//找到,跳出循环
if(strcmp(students[i].no,pNumber)==0&
&
i!
=j)
break;
if(i<
total)
returni;
else
return-1;
intInputoneperson(inti)//在i输入一条记录
intflag,j,sum=0;
//sum总分
charno_temp[10];
//Show();
//可显示所有信息
InputNO.(20040001):
scanf("
no_temp);
//printf("
total=%d\n"
调试时用
if((flag=CheckNumber(no_temp,i))>
=0)
Numberrepeated.\n"
return0;
strcpy(students[i].no,no_temp);
Name(lessthan12characters):
students[i].name);
Gender:
students[i].gender);
\n语文\t数学\t英语\n"
for(j=0;
M;
students[i].score[j]);
sum=sum+students[i].score[j];
students[i].score[M]=sum/M;
clear();
//清屏