14级程序设计实习内容.docx
- 文档编号:4163831
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:19
- 大小:104.82KB
14级程序设计实习内容.docx
《14级程序设计实习内容.docx》由会员分享,可在线阅读,更多相关《14级程序设计实习内容.docx(19页珍藏版)》请在冰豆网上搜索。
14级程序设计实习内容
浙江树人大学
信息科技学院
《程序设计基础》
(课程设计指导书)
浙江树人大学信息科技学院
生产实习(课程设计)任务书
课题或任务
C语言程序设计基础
周次
1周
专业
计算机科学与技术(本)
班级
计算机141/142/143/144/数媒141、142
指导教师
朱斌、华冠萍、徐萍、胡锋俊、张华音、陈超祥、虞飞华、陈华锋
实习任务与目的
通过本次实训,掌握C语言的主要知识点:
控制语句、数组、函数、结构体、文件等,掌握C程序的结构化程序设计方法,能使用C语言开发简单的应用程序。
实习时间、地点
实习具体内容
(题目一)学生学籍管理系统
(题目二)学生成绩管理系统
实习任务安排
基本任务
1、选题,每人选择一个题目完成:
学号后两位为奇数的选题目一,为偶数的选题目二。
2、理解题意,明确设计目标与任务。
3、用C语言实现课题设计、编码、调试、运行、验收。
4、指导老师检查、验收设计结果,并提问。
扩展任务
1、软件开发:
了解软件开发思想和基本方法,规范设计过程和文档
2、菜单显示:
能利用C语言的图形知识,设计得更漂亮、便捷
3、表格显示:
为所显示的记录内容加上表格,表格线条利用画线等功能实现
实习要求
1.明确设计任务,能口述并文字描述清楚自己的题目要求、期望结果;
2.清楚设计过程中的主要知识运用,不清楚的及时与指导老师沟通;
3.能进行总体设计,即清楚课题中的数据与文件设计、功能设计、函数模块设计;
4.能对每个模块即函数进行详细设计编码;
5.能对所有的函数模块进行联调;
6.编码仔细,风格统一,尽量减少代码中的语法错误;
7.调试数据多样,注意特殊情况和边界数据处理,尽量减少代码的逻辑错误;
实习(设计)报告编写要求
请参考后面的“ C语言课题设计实习报告模板”
1.设计任务书
2.总体设计(数据、文件设计, 功能设计, 函数模块设计)
3.详细设计(每个模块功能说明,主要流程图,函数构成)
4.调试与测试(描述几个典型模块的调试数据与测试方案及结果)
5.部分主要代码(主要功能模块代码、注释、运行结果)
6.设计体会与建议
7.参考文献
成绩评定
1.完成以上任务
2.考勤记录
3.现场检查与问答情况
4.实习报告的内容
第一天
明确设计任务
(一)目的
1.熟悉系统的组成及各个功能模块的作用
2.掌握C程序的组成
3.掌握主函数的功能
4.掌握菜单的显示方法
5.掌握菜单的处理方法
6.掌握函数的调试方法
(二)内容
1.由指导老师分配题目、分析题义
2.指导老师讲解文件函数的用法;
3.与指导老师讨论,进一步明确题意,分析选题的主要知识点和算法
4.学生根据分析,复习知识点:
switch语句、循环语句、结构体、函数、结构体数组
5.编写主界面
(三)指导
1.实验环境
可用C-Free或VC++或VS.net
2.复习知识点:
(1)Switch语句、循环、函数、结构体、结构体数组、文件
(2)熟练掌握数组元素:
增、删、改、查、排序、统计;
第二天总体设计
(一)目的
1.基本完成总体设计:
数据文件设计、功能设计、模块设计;
2.编程设计主界面,若程序无法实现,需用草图画出;
(二)内容
1.分析选题,描述功能模块、设计主界面;
2.定义主要数据、设计函数模块及函数间的调用关系。
(三)指导
1.“学籍管理系统”的功能模块图参考;
2.“成绩管理系统”的功能模块图参考;
3.定义结构体、结构体数组;
typedefstruct//日期结构体
{
intyear;
intmonth;
intday;
}Date;
typedefstruct//学籍结构体
{
charxh[20];//学号
charxm[10];//姓名
charlxdh[12];//联系电话
charjtdz[30];//家庭地址
Datebirthday;//生日
charzy[15];//专业
}XJ;
XJxsxj[100];//用XJ定义一个数组存放成绩;
typedefstruct//成绩结构体
{
charxh[20];//学号
charxm[10];//姓名
Datebirthday;//出生日期
charkcmc[15];//课程名称
intcj;//成绩
}CJ;
CJxscj[100];//用结构体CJ定义一个数组存放成绩
第三天详细设计
(一) 目的
1.分解功能模块,分析函数间的调用流程;
2.编写各个函数代码,逐个实现功能模块;
(二) 内容
编写各个处理函数模块的代码;
(三) 指导
1.“学籍管理系统”完成模块:
添加学籍信息、删除学籍信息、修改学籍信息;
2.“成绩管理系统”完成模块:
添加成绩信息、删除成绩信息、修改成绩信息;
第四天详细设计
(一) 目的
1、分解功能模块,分析函数间的调用流程;
2、编写各个函数代码,逐个实现功能模块;
(二) 内容
1.结构体定义,结构体数组定义;
2.完成各个处理函数模块的代码实现;
(三) 指导
3.“学籍管理系统”完成模块:
查询学籍信息、统计学籍信息、排序学籍信息;
4.“成绩管理系统”完成模块:
查询成绩信息、统计成绩信息、排序成绩信息;
第五天
测试联调,检验评分
(一)目的
1.为程序增加文件存储功能;
2.将所有程序模块进行联合调试
3.消除程序中存在的测试错误及改进程序的不足
4.学生演示并答疑,老师检查结果并评分
(二)内容
1.使用单步和断点调试方法发现函数中存在的错误。
2.使程序符合设计要求,达到对应的设计效果。
(三)指导
1.常用结构体数据的文件读写函数:
fread()、fwrite()。
2.实现系统中的文件操作接口。
部分代码参考
“学籍管理系统”和“成绩管理系统”可以由以下函数模块组成,分别介绍如下:
函数名(功能模块)或其他
功能
main()
主函数
menu_select()
菜单选择
handle_menu()
菜单处理
s_read()
读取记录
s_save()
保存记录
xhexist()
判断某学号是否存在
s_add()
添加记录
modi_xh()
按学号修改记录
modi_xm()
按姓名修改记录
del_xh()
按学号删除记录
del_xm()
按姓名删除记录
sear_all()
查询所有记录
sear_xm()
按姓名查询记录
sear_xh()
按学号查询记录
sear_sr()
按生日查询记录
sear_jtdz()
按家庭地址查询记录
sort_xh()
按学号排序
sort_cj()
按成绩排序
count1()
统计?
?
?
其它函数
总体设计思想:
为了简化程序,对所有记录操作通过结构体数组完成,当程序开始执行时把数据文件一次性读入到结构体数组中,以后对数据的操作都通过结构体数组来完成。
“添加、修改、删除”时进行写文件操作,“查找、排序”操作进行读文件。
(一)主控模块
typedefstruct//日期结构体
{
intyear;
intmonth;
intday;
}Date;
typedefstruct//学籍结构体
{
charxh[20];//学号
charxm[10];//姓名
charlxdh[12];//联系电话
charjtdz[30];//家庭地址
Datebirthday;//生日
charzy[15];//专业
}XJ;
#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#include"ctype.h"
#include"string.h"
#defineLENsizeof(structXJ)
XJstud[100];//用XJ定义一个数组存放成绩
intreccount=0; /*定义全局变量存放当前记录、记录数*/
voids_read(); /*函数声明:
读记录*/
voids_save(); /*函数声明:
保存记录*/
intxhexist(charnum[],intw); /*函数声明:
判断学号是否存在*/
voids_add();/*函数声明:
追加记录*/
voidsear_xh(); /*函数声明:
按学号查询*/
voidsear_xm(); /*函数声明:
按姓名查询*/
voidsear_all(); /*函数声明:
查询所有记录*/
voidsear_sr();/*函数声明:
按输入的出生年、月或日期查询记录*/
voidsear_jtdz();/*函数声明:
按输入的地址查询记录*/
voidmodi_xh(); /*函数声明:
按学号修改*/
voidmodi_xm(); /*函数声明:
按姓名修改*/
voiddel_xh(); /*函数声明:
按学号删除*/
voiddel_xm(); /*函数声明:
按姓名删除*/
voidsort_xh(); /*函数声明:
按学号排序*/
voidsort_cj(); /*函数声明:
按成绩排序*/
intmenu_select(); /*函数声明:
菜单选择*/
voidhandle_menu(); /*函数声明:
菜单处理*/
voidmain()/*程序入口
{
s_read(); /*调用读记录函数*/
handle_menu(); /*调用菜单处理函数*/
}
/*以下定义菜单处理函数*/
voidhandle_menu()
{
intsel,flag;
for(;;)
{
switch(menu_select()) /*用来调用菜单选择函数*/
{
case1:
s_add(); /*调用追加记录函数*/
break;
case2:
flag=1;
while(flag)
{
/*以下显示修改记录子菜单*/
printf("\n[修改记录子菜单]\n\n");
printf("+------------------------+\n");
printf("|1.按学号修改|\n");
printf("|2.按姓名修改|\n");
printf("|0.返回|\n");
printf("+------------------------+\n");
printf("请选择(0~2:
");
scanf("%d",&sel);
switch(sel)
{
case0:
flag=0;
break;
case1:
modi_xh();
break;
case2:
modi_xm();
break;
}
}
break;
case3:
flag=1;
while(flag)
{
/*以下显示删除记录子菜单*/
printf("\n[删除记录子菜单]\n\n");
printf("+------------------------+\n");
printf("|1.按学号删除|\n");
printf("|2.按姓名删除|\n");
printf("|0.返回|\n");
printf("+------------------------+\n");
printf("请选择0~2:
");
scanf("%d",&sel);
switch(sel)
{
case0:
flag=0;
break;
case1:
del_xh();
break;
case2:
del_xm();
break;
}
}
break;
case4:
flag=1;
while(flag)
{
/*以下显示查询子菜单*/
printf("\n[查询记录子菜单]\n\n");
printf("+------------------------+\n");
printf("|1.按学号查询|\n");
printf("|2.按姓名查询|\n");
printf("|3.查询全部|\n");
printf("|0.返回|\n");
printf("+------------------------+\n");
printf("请选择(0~3:
");
scanf("%d",&sel);
switch(sel)
{
case0:
flag=0;
break;
case1:
sear_xh();
break;
case2:
sear_xm();
break;
case3:
sear_all();
break;
}
}
break;
case5:
flag=1;
while(flag)
{
/*以下显示排序记录子菜单*/
printf("\n[排序记录子菜单]\n\n");
printf("+------------------------+\n");
printf("|1.按学号排序|\n");
printf("|2.按成绩排序|\n");
printf("|0.返回|\n");
printf("+------------------------+\n");
printf("请选择0~2:
");
scanf("%d",&sel);
switch(sel)
{
case0:
flag=0;
break;
case1:
sort_xh();
break;
case2:
sort_cj();
break;
}
}
break;
case0:
printf("exit,bye!
\n");
s_save();//退出前,调用一次函数将数组中的数组保存至文件
exit(0);
}
}
}
/*以下定义选择菜单函数*/
intmenu_select()
{
chars[2];
intcn;
/*以下显示主菜单*/
printf("\n\n[主菜单]\n");
printf("\n");
printf("+--------------------+\n");
printf("|1—追加记录|\n");
printf("|2—修改记录|\n");
printf("|3—删除记录|\n");
printf("|4—查询记录|\n");
printf("|5—排序记录|\n");
printf("|0—退出|\n");
printf("+--------------------+\n");
for(;;)
{
printf("\n请选择(0~5):
");
scanf("%d",&cn);
printf("\n");
if(cn<0||cn>5)
printf("\ninputerror!
");
else
break;
}
returncn;
}
(二)主要功能模块
1、s_read()函数:
当第一次使用本系统时,应自动建立数据文件“st_table”,以后则能从“st_table”文件中读取记录并存入结构体数组中。
voids_read()
{
FILE*fp;
inti;
if((fp=fopen("st_table","rb"))==NULL)
{
if((fp=fopen("st_table","wb"))==NULL)
{
printf("不能打开文件!
\n");
exit
(1);
}
fclose(fp);
}
fclose(fp);
if((fp=fopen("st_table","rb"))==NULL)
{printf("不能打开文件!
\n");
exit
(1);
}
i=0;
reccount=0;
while(!
feof(fp))
{
if(1!
=fread(&stud[i],LEN,1,fp))break;
++reccount;
i++;
}
fclose(fp);
printf("记录总数=%d\n",reccount);
}
2、s_save()函数:
当结构体数组中的数据发生变化时,如添加记录、修改记录、删除记录等,将通过该函数把最新数据重新写回到磁盘文件“st_table”中。
/*以下定义写记录到文件函数*/
voids_save()
{
FILE*fp;
inti;
if((fp=fopen("st_table","wb"))==NULL)
{printf("不能打开文件!
\n");
exit
(1);
}
for(i=0;i if(fwrite(&stud[i],LEN,1,fp)! =1) printf("文件写错误! \n"); fclose(fp); } 3、xhexist()函数: 用来判断某学号是否存在,若存在则返回函数值1,否则返回0,因为本系统要求学号作为唯一的关键字,即不允许出现重复的学号,当执行添加、修改操作时通过调用本函数则保证学号的唯一性。 /*以下定义判断学号是否存在函数*/ intxhexist(charnum[]) { inti; intflag=0; for(i=0;i if(strcmp(num,stud[i].xh)==0) { flag=1; break; } return(flag); } 4、s_add()函数: 用来实现向结构体数组中添加一条新记录,在输入时对学号的重复进行判断。 voids_add() { chars[2]; intcount=recount; while (1) { printf("学号: "); scanf("%s",stud[count].xh); if(xhexist(stud[count].xh)==1) printf("学号已存在! \n"); else break; } printf("姓名: "); scanf("%s",stud[reccount].xm); printf("联系电话: "); scanf("%s",stud[reccount].lxdh); printf("家庭地址: "); scanf("%s",stud[reccount].jtdz); printf("邮政编码: "); ………//依次输入需添加的每一项内容 reccount++; printf("总记录数=%d\n",reccount); } 5、voidmodi_xh()函数: 用来实现按学号修改记录,首先输入要修改的学号,若存在则显示原数据,然后提示输入新数据,输入时对学号的重复进行判断,若已存在则不允许输入;否则提示学号不存在。 6、voidmodi_xm()函数: 用来实现按姓名修改记录,首先输入要修改的姓名,若存在则显示原数据,然后提示输入新数据,输入时对学号的重复进行判断,若已存在则不允许输入,并能修改多个相同姓名的记录;否则提示姓名不存在。 7、voiddel_xh()函数: 用来实现按学号删除记录,首先输入要删除的学号,若存在则显示原数据,然后提示是否真的删除,若输入Y则进行删除操作,删除通过记录上移的方法实现;否则提示学号不存在。 8、voiddel_xm()函数: 用来实现按姓名删除记录,首先输入要删除的姓名,若存在则显示原数据,然后提示是否真的删除,若输入Y则进行删除操作,删除通过记录上移的方法实现,并可以删除多个相同姓名的记录;否则提示姓名不存在。 8、voidsear_xh()函数: 用来实现按学号查询记录,首先输入要查询的学号,若存在则显示原数据;否则提示学号不存在。 9、voidsear_xm()函数: 用来实现按姓名查询记录,首先输入要查询的姓名,若存在则显示原数据,并可以查询多个相同姓名的记录;否则提示姓名不存在。 10、voidsear_all()函数: 用来实现显示全部记录。 11、voidsear_sr()函数: 用来完成按生日查询,首先输入要查询的生日,可以输入四种数据,并分别得出相应查询结果: ①输入年(格式4位: 19**),查询显示此年度出生的所有学生记录;②输入月(格式1至2位: 1-12间的整数),查询显示这个月份出生的所有学生记录;③输入年月(格式6位: 198708)查询显示本年和本月出生的所有学生记录;④输入月/日期(格式4位: 0621),查询显示同月同日生的所有学生记录。 12、voidsear_jtdz()函数: 用来完成按家庭地址查询,首先输入地址,格式可以是任意一个字符串,通过匹配字符串中的子串的方法,找出与家庭地址与输入地址相符的所有学生记录。 13、voidsort_xh()函数: 用来实现按学号排序记录,要求采用起泡法进行排序。 14、voidsort_cj()函数: 用来实现按成绩进行排序,可以采用选择排序或冒泡排序算法。 15、其它,自己设计;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 14 程序设计 实习 内容