资源描述
课程设计(大作业)汇报
课程名称: 程序设计基础课程设计
设计题目: 职职员作量统计系统设计
院 系:
班 级:
设 计 者:
学 号:
指导老师:
设计时间: .6.25~.6.29
课程设计(大作业)任务书
姓 名: 院(系):
专 业: 学 号:
任务起止日期:.6.25~.6.29
课程设计题目:职职员作量统计系统设计
课程设计要求:
编写有一个职职员作量统计程序,信息包含职职员号和完成产品数量。
具体功效
1.系统以菜单方法工作
2.输入职职员号和完成产品数量(许可同一职员有数次输入)并以磁盘文件保留;
3.对每个职员完成产品数量实现累计。
4.按完成数量对职员排序,并确定她们名次。按完成产品数量由多到少次序,输出名次、同一名次职员人数及她们工号(工号由小到大次序输出)。
5.查询职员完成产品信息。
(1)按职员号查询
2)按名次查询
工作计划及安排:
因为我们设计题目是:职职员作量统计系统设计所以我们对我们课程有以下安排:
6月25日早晨:我们先分析了我们课程需要要求,对题目所要求作出一个安排,对设计所要求做出一个全方面计划,选定我们所要用数据和函数,在计算机上操作先写出我们所需要头文件,然后在写出我们菜单方法格式;
六月25日下午:根据我们早上所写出菜单格式开始写我们主程序:
⑴写一个函数输入职职员号和职员所完成产品数量(许可同一职员有数次输入)并写出所需要函数作用和用途;
⑵写一个函数和磁盘文件用来存放每个职员信息;
6月26日早晨:根据先前完成程序,写一个函数对完成数量职员排序,并确定她们名次。按完成产品数量由多到少次序,而且输出名次、同一名次职员人数及她们工号(工号由小到大次序输出);
6月26日早晨:根据先前完成程序写一个对职员信息查询,①按职员号查询;②按名次查询;
6月27日早晨~下午:调整程序,使程序愈加美观,优化程序。还加入了一个将数据从磁盘读出小函数,方便进行程序操作和运行。
6月28日早晨:深入了解程序,为答辩做准备。
剩下时间对程序进行修改和撰写程序试验汇报。而且经过总体设计和具体设计将程序分解开,并进行具体说明。
指导老师签字
年 月 日
课程设计(大作业)成绩
学号: 姓名: 指导老师:
课程设计题目:职职员作量统计系统设计
总结:
经过这次课程设计,我收获了很多。从以前不喜爱程序设计到现在对程序慢慢产生爱好,从不知道该怎样下手到慢慢有了思绪和框架结构,以前认为编程极难、很繁杂没有思绪,现在我知道只要构思出大致框架、写出总体设计思绪,编程就已经成功二分之一了,在编程过程中在逐步细分、数次上机调试。程序就基础完成了。
在这次设计中,我们也碰到了很多问题,比如:将数据写入磁盘,在从磁盘中取数据;将个职员完成产品总数排序得出名次,并将产品总数相同职员按工号由小到大输出;还有按职员号和名次来查询职员信息等。碰到问题时,我们优异行同组同学讨论并在书本中查找,假如还没处理,就请教其它同学。碰到问题太复杂,我们无法处理时就向老师请教。就这么一点一滴积累,一点一点修改,最终完成了课程设计。在这个过程中,有迷惑、有烦恼、也有喜悦。
对于我个人来说,在这次实训中碰到问题有: 1、对文件操作不熟悉,如用fopen函数打开数据文件,对“wb”和“rb”区分和怎样使用混淆了。经过查找资料,我知道了“wb”只以写方法从磁盘打开文件,而“rb”是以读方法从磁盘读出数据;2、将各职员产品数累加时,我用了全局变量结构体数组stu[i].count来存放职员产品数stu[i].product[j]累计后总和,不过用stu[i].count来存放时,stu[i].count没有初始化,造成输出数总是随机数;3、在写按职员号和名次查询函数时,没有用到判定语句,造成查找时总是犯错。在碰到这些问题时,即使调试了很数次还是犯错,但最终还是经过和小组组员讨论,请教老师、同学,最终把这些问题全部处理了。
这次设计使我受益匪浅,在以后学习中,我将以愈加饱满激情,愈加主动态度来面对程序设计这门课程,也要将这份激情延续到其它课程中。
指导老师评语:
成绩:
填表时间: 指导老师署名:
课程设计(大作业)汇报
目录
课程设计(大作业)汇报 - 1 -
课程设计(大作业)任务书 - 2 -
一、课程设计目标和要求 - 5 -
1.课程设计目标 - 5 -
2. 课程设计要求 - 5 -
二、总体设计 - 5 -
三、具体设计 - 6 -
1、数据结构设计 - 6 -
2.函数说明 - 6 -
3.函数设计 - 7 -
四、程序清单和实施结果 - 7 -
1.头文件 - 7 -
2.主函数源程序代码和运行结果 - 8 -
3各小函数运行结果. - 10 -
五、调试和测试 - 13 -
六、结语 - 14 -
一、课程设计目标和要求
1.课程设计目标
(1) 综合利用之前所学知识(选择控制,循环控制,数组,函数,指针,结构体和文件等)来完成一个简单信息管理程序设计。
(2) 充足表现和体会函数在程序设计中必需性和实用性,并反应主函数main()在程序设计中实现思绪和方法。
2. 课程设计要求
编写有一个职职员作量统计程序,信息包含职职员号和完成产品数量。
具体功效:
1.系统以菜单方法工作
2.输入职职员号和完成产品数量(许可同一职员有数次输入)并以磁盘文件保留;
3.对每个职员完成产品数量实现累计。
4.按完成数量对职员排序,并确定她们名次。按完成产品数量由多到少次序,输出名次、同一名次职员人数及她们工号(工号由小到大次序输出)。
5.查询职员完成产品信息
(1)按职员号查询
(2)按名次查询
二、总体设计
对程序操作退出
对职员排名查询
对职员号查询
对职员完成产品排序
职员信息读出
职员信息保留
统计职员工作量
职员信息录入
职职员作量统计程序
依据系统要求,系统总体设计图1
三、具体设计
1、数据结构设计
#define N 100 //定义常数表示职员数
int h=0,m=0; //定义全局变量表示总职员人数
struct workstation //定义数据结构体
{
int no; //职员号
int product[N]; //职员完成产品数量
int rank; //职员完成产品量排名
int count; //每个职员完成总产品量
}stu[N];
2.函数说明
(1) 主函数
main()许可用户经过菜单进行功效选择,使用对应功效代码来调用对应函数功效。
(2) 其它各功效函数包含
函数名
功效
void menu_select()
输出程序功效菜单
void enter()
键盘输入职员数据(职员号和完成产品数)
void count1()
将各职员产品数累计
void save()
将职员数据写入磁盘保留
void read1()
将职员数据从磁盘读出
void rank1()
用各职员产品总数排序而且输出名次
void search()
按职员号查询职员信息
void lookfor()
按名次查询职员信息
void over()
退出程序
3.函数设计
(1)主菜单函数menu_select()
功效:输出菜单选项
void menu_select(void) //输出程序功效主菜单,代表所选菜单项
{
printf("***********************\n");
printf("**********菜单**********\n");
printf("0.输入职员信息统计\n");
printf("1.统计职职员作量\n");
printf("2.保留职员信息\n");
printf("3.读出职员信息统计\n");
printf("4.对完成产品数量排序\n");
printf("5.按职员号查询职员完成产品信息\n");
printf("6.按职员名次查询职员完成产品信息\n");
printf("7.退出程序\n");
printf("***********************\n");
printf("***********************\n");
}
}
四、程序清单和实施结果
1.头文件
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100 //定义常数表示职员数
int h=0,m=0; //定义全局变量表示总职员人数
struct workstation //定义数据结构体
{
int no; //职员号
int product[N]; //职员完成产品数量
int rank; //职员完成产品量排名
int count; //每个职员完成总产品量
}stu[N];
int main () //许可用户经过菜单进行功效选择,使用对应功效代码来调用对应函数功效
char b='Y',c;
void menu_select(void); // 主菜单函数
void enter(void); //输入职员信息统计
void save(void); //保留职员信息统计
void read1(void); //读出职员信息统计
void count1(void); //统计职职员作量
void rank1(void); //对完成产品数量排序
void search(void); //按职员号查询职员完成产品信息
void lookfor(void); //按职员名次查询职员完成产品信息
void over(void); //退出程序
2.主函数源程序代码和运行结果
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100 //定义常数表示职员数
int h=0,m=0; //定义全局变量表示总职员人数
struct workstation //定义数据结构体
{
int no; //职员号
int product[N]; //职员完成产品数量
int rank; //职员完成产品量排名
int count; //每个职员完成总产品量
}stu[N];
int main () //许可用户经过菜单进行功效选择,使用对应功效代码来调用对应函数功效
{
char b='Y',c;
void menu_select(void); // 主菜单函数
void enter(void); //输入职员信息统计
void save(void); //保留职员信息统计
void read1(void); //读出职员信息统计
void count1(void); //统计职职员作量
void rank1(void); //对完成产品数量排序
void search(void); //按职员号查询职员完成产品信息
void lookfor(void); //按职员名次查询职员完成产品信息
void over(void); //退出程序
menu_select();
for (;b!='N'&&b!='n';)
{
printf("输入你选项0-7:\n");
scanf("%c",&c);
switch(c)
{
case '0':enter();break;
case '1':count1();break;
case '2':save();break;
case '3':read1();break;
case '4':rank1();break;
case '5':search();break;
case '6':lookfor();break;
case '7':return 0;
}
printf("继续输入请输Y,结束输入N 或 n:");
getchar();
b=getchar(); //把printf输出字符送回for循环
getchar();
}
return 0;
}
void menu_select(void) //输出程序功效主菜单,代表所选菜单项
{
printf("***********************\n");
printf("**********菜单**********\n");
printf("0.输入职员信息统计\n");
printf("1.统计职职员作量\n");
printf("2.保留职员信息\n");
printf("3.读出职员信息统计\n");
printf("4.对完成产品数量排序\n");
printf("5.按职员号查询职员完成产品信息\n");
printf("6.按职员名次查询职员完成产品信息\n");
printf("7.退出程序\n");
printf("***********************\n");
printf("***********************\n");
}
(1)主菜单运行结果:
3各小函数运行结果.
(1)void count1(void) //统计职职员作量
{
int i,j;
for(i=0;i<h;i++)
{
stu[i].count=0;
for(j=0;stu[i].product[j]!=-1;j++)
{
stu[i].count+=stu[i].product[j]; //累加每个职员产品
}
}
}
(2)void read1(void) //读出职员信息统计
{
FILE *fp; //定义指向FILE类型文件指针变量
int i;
if((fp=fopen("E:\\qusi.txt","rb"))==NULL) //以读方法打开磁盘
{
printf("文件错误!");
exit(0);
}
for(i=0;!feof(fp);i++)
{
if(fread(&stu[i],sizeof(struct workstation),1,fp)!=1) //把磁盘中数据读到stu[i]数组中
{
return;
}
else
{
printf("%-4d%5d\n",stu[i].no,stu[i].count); //输出读入磁盘信息
}
}
fclose(fp); // //关闭磁盘
}
(3)、void search(void) //按职员号查询职员完成产品信息
{
FILE *fp;
int i,j=0,n;
if((fp=fopen("E:\\qusi.txt","rb"))==NULL)
{
printf("文件为空!");
exit(0);
}
for(i=0;!feof(fp);i++)
{
if(fread(&stu[i],sizeof(struct workstation),1,fp)!=1)
{
break;
}
m++; //统计读了多少次,多少次就代表多少个职员
}
fclose(fp);
printf("输入你所要查找职员号:\n");
scanf("%d",&n); //输入一个查找职员号
for(i=0;i<m;i++)
{
if(stu[i].no==n) //判定所输入工号
{
printf("%3d%5d\n",stu[i].no,stu[i].count);
j=1;
}
}
if(j==0)
{
printf("查找数据不存在:\n");
}
}
(4) 函数void over() 功效:结束程序
void over()
五、调试和测试
所谓程序调试是对我们在写程序出现错误进行查错和排错。对此程序我们进行了以步骤:
人工检验,即静态检验。此过程我们对于写好程序进行了排查,而且在有错误地方进行了注释,还有对我们所碰到错误进行了分析而且更正。
上机调试。经过上机调试发觉错误为动态检验,这时我们发觉了我们在写程序过程中出现很多错误和警告,我们依据提醒逐一更正。
运行程序。这一步骤我们逐一检验每个菜单是否运行正常和正确,在这个过程中我们出现了很多格式和函数调用不正确,比如我们在上机调试时候我们程序就出现了很多困难,在我们菜单选项中我们选项2是“统计职职员作量”我们用结构体stu[i].count来进行累加,我们在写程序时候用结构体no代表职员号,用结构体product来代表职员所完成产品量,我们选项3是“对完成产品数量排序”在输入时候要求根据职员完成产品数量从大到小排序,不过我们在输出时候把结构体product输出来代表职员全部产品量,不过我们调试总是出现错误,职员排序总是输犯错误,以后经过我们细心查找才发觉我们输出出现错误了,我们使用结构体stu[i].count来对职员产品进行累加,所以我们输出应该用stu[i].count来输出职员产品数,经过我们修改最终找出了错误,我们在排序输出名次时候,第一名总是以第0名输出,以后经过我们查找我们才发觉我们用来统计名次数是从0开始以后我们把它改从1开始就对了,我们在对职员信息查询是也出现了点问题,不过经过我们查询和调试我们还是更正了那些出现错误和警告。
具体调试过程以下:
(1)统计职职员作量
void count1(void)
{
int i,j;
for(i=0;i<h;i++)
{
for(j=0;i<h;j++)
{
stu[i].count+=stu[i].product[j]; //累加每个职员产品
}
}
}
修改为:
void count1(void)
{
int i,j;
for(i=0;i<h;i++)
{
stu[i].count=0;
for(j=0;stu[i].product[j]!=-1;j++) //在写void enter(void)时,写了一条命令“在是否继续输入职员产品数后加了一条stu[i].product[j]=-1”
{
stu[i].count+=stu[i].product[j]; //累加每个职员产品
}
}
}
(2)按职员号查询时
int i,n;
for(i=0;i<m;i++) //m统计有多少个职员
{
if(stu[i].no==n) //判定所输入工号
printf("%3d%5d\n",stu[i].no,stu[i].count);
else
printf("查找数据不存在:\n");
}
修改为:
int i,j=0,n;
for(i=0;i<m;i++) //m统计有多少个职员
{
if(stu[i].no==n) //判定所输入工号
{
printf("%3d%5d\n",stu[i].no,stu[i].count);
j=1;
}
}
if(j==0)
{
printf("查找数据不存在:\n");
}
}
总而言之,在我们对程序进行了细心调试和测试以后,我们程序正常运行了,不过其中还是有很多不足地方。比如我们在从磁盘读出数据时候就有数据遗失,不过经过我们修改以后就变得完善了,在我们对职员信息查询时候也碰到不少问题,不过我们还是依据调试不正确而加也修更正确了。
六、结语
经过这几天C程序课程设计,我们小组既发觉了很多不足,又学到了很多我们上课没有掌握只是,也学到了很多以前不懂知识。使我们对这门课程有了更深一步了解,而且也对它产生了一定爱好,对我们以后学习有了关键作用。其中,老师对我们帮助也是其到了极大作用,我们有不明白或是模糊地方就像老师请教,以后我们还将对此进行深入了解,增加我们知识,为我们以后学习打好基础,在此我们小组组员对对老师给我们帮助表示感谢!
展开阅读全文