《程序设计综合训练》指导书.docx

上传人:b****4 文档编号:4239554 上传时间:2022-11-28 格式:DOCX 页数:23 大小:144.48KB
下载 相关 举报
《程序设计综合训练》指导书.docx_第1页
第1页 / 共23页
《程序设计综合训练》指导书.docx_第2页
第2页 / 共23页
《程序设计综合训练》指导书.docx_第3页
第3页 / 共23页
《程序设计综合训练》指导书.docx_第4页
第4页 / 共23页
《程序设计综合训练》指导书.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

《程序设计综合训练》指导书.docx

《《程序设计综合训练》指导书.docx》由会员分享,可在线阅读,更多相关《《程序设计综合训练》指导书.docx(23页珍藏版)》请在冰豆网上搜索。

《程序设计综合训练》指导书.docx

《程序设计综合训练》指导书

 

《程序设计综合训练》

——C语言版

指导书

 

江苏技术师范学院

2011年8月

第一章综合训练介绍

1.1综合训练目的

《程序设计综合训练》是在学习完《程序设计基础》课程后开设的一门实践性课程。

要求学生以个人为单位,在教师指导下,综合运用所学过的C语言程序设计知识,掌握结构化程序设计的基本思路和方法,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解和掌握,增强学生运用理论课所学知识分析问题、解决实际问题的能力,通过本课程的实践,为以后的程序开发打下良好的基础。

综合训练的目的和要求:

(1)使学生巩固和加强《C语言程序设计》课程的理论知识。

(2)使学生掌握C语言的基本概念、语法、语义和数据类型的使用特点。

(3)使学生掌握C语言程序设计的方法和编程技巧,能正确使用C语言编写程序。

(4)进一步理解和运用结构化程序设计的思想和方法,学生利用流程图或N-S图表示算法。

(5)使学生掌握调试程序的基本方法及上机操作方法。

(6)掌握书写程序设计开发文档的能力,使学生学会撰写综合训练总结报告。

综合训练的思想和方法还可以作为学生做毕业设计时的参考资料。

(7)通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。

为学生以后的程序开发打好基础。

(8)初步掌握开发一个小型实用系统的基本方法:

结合实际应用的要求,使综合训练既覆盖知识点,又接近工程实际需要。

通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己分析问题的能力和编程能力,养成良好习惯。

(9)培养学生的创新能力和创新思维方式。

学生可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序,也可以根据自己的兴趣、爱好、特长,或者以前已经接触过的内容,自行确定综合训练课题。

(10)培养学生良好的程序设计风格。

在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。

学生在综合训练书写代码时,应该严格按要求处理,以便建立良好的程序设计风格和习惯。

1.2设计环境及语言

(1)硬件:

PC机,不低于CPU为PIII,内存为128,4G硬盘,其他硬件与此相匹配。

(2)软件:

操作系统为Windows2000或WindowsXP,设计语言为TurboC3.0或VisualC++集成开发环境。

1.3步骤

(1)需求分析从软件使用者处获得用户需求,确定课题开发应具备的功能;

(2)系统结构设计将整个系统功能分块,考虑各个功能模块应具备的功能,模块间的联系,划分成不同的子系统进行设计(确定各模块函数名称);

(3)数据设计根据问题描述,设计系统中的数据类型、数据存储方式;

(4)代码设计在上述3个阶段的基础上完成主程序算法设计和各模块算法设计;

(5)代码实现编程实现;

(6)软件调试和测试使用事先设计好的测试用例、对编制的程序进行测试,发现存在错误(包括潜在的问题),加以修改,完善;

(7)撰写文档完成设计文档和综合训练报告。

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"

#include"stdlib.h"

#include"string.h"

#defineMAX500

#defineM3//课程门数

structStudent//学生记录结构

{

charno[10];//学号

charname[10];//姓名

chargender[4];//性别

intscore[M+1];//三门功课,score[M]为总成绩

};

inttotal;//记录人数

structStudentstudents[MAX];//定义students[MAX]为全局变量

/************************************************************/

voidInit();//初始化,文件不存在,则建立文件

voidexchange(inti,intj);//交换两个人的所有信息

voidSort();//按编号从小到大选择排序,并显示存盘

intget_menu_choice();//接受菜单选择

voidShow_menu();//显示菜单

voidmenu();//菜单响应

voidPrintTitle();//打印头信息

voidclear();//清屏

FILE*file_operate(char*mode);//文件操作

voidAlter(FILE*fp);//修改一条记录信息

voidDelete(FILE*fp);//删除一条记录

voidShowoneperson(inti);//显示打印一个人的信息

voidShow();//显示打印所有的信息

voidSave();//保存信息到文件

voidFind();//查找记录的函数

intCheckNumber(char*pNumber,int);//输入的编号是否重复

intInputoneperson(inti);//向数组增加一条记录

voidInput(FILE*fp);//向通讯录中增加记录

voidset_psw();//设置密码

voidpsw_check();//密码验证

voidInputfile(inti,FILE*fp);//把下标为i的记录写入文件

voidReadfile(inti,FILE*fp);//读一条记录从文件

/***********************************************************/

voidShow_menu()

{

printf("\n\n");

printf("\t欢迎使用通讯录\n");

printf("\t**************************************************\n");

printf("\t1.显示数据|2.删除数据\n");

printf("\t3.查询数据|4.输入数据\n");

printf("\t5.修改数据|6.备份数据\n");

printf("\t7.设置口令|8.数据排序\n");

printf("\t0.退出\n");

printf("\t**************************************************\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<0||sel>8);

returnsel;

}

voidclear()//清屏

{

system("pause");

system("cls");

}

voidPrintTitle()//显示表头

{

printf("---------------------------------------------------------");

//学生设计

}

voidInit()//文件不存在,则建立文件

{

inti;

FILE*fp;

total=0;

if((fp=fopen("student.txt","rb"))==NULL)//打开文件失败,表示文件不存在

{

fp=fopen("student.txt","a");//新建文件

menu();//调用菜单

}

else//如果原来文件存在了

{

for(i=0;feof(fp)==0;i++)//获取总人数

Readfile(i,fp);

}

total=i;//总人数

fclose(fp);

}

FILE*file_operate(char*mode)//文件操作

{

charchoice;

FILE*fp;

do

{

fflush(stdin);

if((fp=fopen("student.txt",mode))==NULL)

{

puts("Fileoperationfailure.");

puts("Tryagain(y/n)?

");

scanf("%c",&choice);

}

}while(choice=='y'||choice=='Y');

if(choice=='n'||choice=='N')

exit

(1);//出现异常退出

return(fp);

}

voidShowoneperson(inti)//显示一条记录

{

intj;

printf("%s",students[i].no);

printf("\t%s",students[i].name);

printf("\t%s",students[i].gender);

for(j=0;j

printf("\t%d",students[i].score[j]);

printf("\n");

}

voidShow()//显示所有记录

{

inti;

printf("There%dRecord:

\n",total);

PrintTitle();

for(i=0;i

Showoneperson(i);

}

voidmenu()

{

while

(1)

{

Show_menu();

switch(get_menu_choice())

{

case1:

Show();

clear();

break;

case2:

Delete(file_operate("r"));

clear();

break;

case3:

Find();

clear();

break;

case4:

Input(file_operate("a"));//增补,如果文件不存在则创建一个

clear();

break;

case5:

Alter(file_operate("rb"));

clear();

break;

case6:

Save();

clear();

break;

case7:

set_psw();

clear();

break;

case8:

Sort();

clear();

break;

case0:

printf("欢迎你使用本程序!

\n");

clear();

exit(0);//程序正常退出

}

}

}

intCheckNumber(char*pNumber,intj)

{

inti;

for(i=0;i

if(strcmp(students[i].no,pNumber)==0&&i!

=j)

break;

if(i

returni;

else

return-1;

}

intInputoneperson(inti)//在i输入一条记录

{

intflag,j,sum=0;//sum总分

charno_temp[10];

//Show();//可显示所有信息

printf("InputNO.(20040001):

");

scanf("%s",&no_temp);

//printf("total=%d\n",total);调试时用

if((flag=CheckNumber(no_temp,i))>=0)

{

printf("Numberrepeated.\n");

return0;

}

else

{

strcpy(students[i].no,no_temp);

printf("Name(lessthan12characters):

");

scanf("%s",&students[i].name);

printf("Gender:

");

scanf("%s",&students[i].gender);

printf("\n语文\t数学\t英语\n");

for(j=0;j

{

scanf("%d",&students[i].score[j]);

sum=sum+students[i].score[j];

}

students[i].score[M]=sum/M;

clear();//清屏

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1