C语言课程设计实验报告.docx
《C语言课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实验报告.docx(28页珍藏版)》请在冰点文库上搜索。
C语言课程设计实验报告
C语言课程设计实验报告
班级
姓名
学号
实验课程
实验名称
工资管理系统
实验成绩
实验日期
任课教师
一、目的(本次课程设计所涉及并要求掌握的知识点。
)
1.复习巩固C语言的基础知识,进一步加深对C语言编程的理解和掌握;
2.利用所学知识,理论和实际结合,利用资源,采用模块化的结构,使用模仿修改自主设计相结合的方法,锻炼自己综合分析解决实际问题的编程能力
3.在这次编程中,使用了文件的打开和关闭,对结构数组的初始化,对库函数的使用,对goto语句的使用,对调用函数的调用。
对信息的输入与输出等进行了一次全面使用。
二、使用环境(本次上机实践所使用的平台和相关软件。
)
本次程序是在Microsoftvisualc++6.0的环境下运行的
三、内容与设计思想
(1.设计思路2.主要数据结构3.主要代码结构4.主要代码段分析。
)
一、
1.需求分析
工资信息存放在文件中,提供文件的输入、输出等操作;要实现浏览功能,提供显示、排序操作;而查询功能要求实现查找操作;另外还应该提供键盘式选择菜单以实现功能选择。
2.总体设计
整个系统可以分为信息输入、信息添加、信息浏览、信息排序、信息查询和信息统计模块。
(1)添加模块
增加新的职工工资信息,从键盘输入并逐条写到原来的输入文件中,采用追加而不是覆盖的方式。
(2)浏览模块
分屏显示职工工资信息,可以指定10个1屏,按任意键显示下一屏。
通过菜单选择按照工资卡号还是姓名浏览。
如果按照卡号浏览,则显示的记录按照卡号升序输出;按照姓名浏览则按照字典序输出(调用排序模块的排序功能)。
(3)排序模块
排序模块提供菜单选择,实现按照工资卡号升序、实发工资降序以及姓名字典序排序。
排序方法可以选择冒泡排序、插入排序、选择排序等。
(4)查询模块
实现按照工资卡号和姓名的查询,采用基本的查找方法即可。
(5)统计模块
输入起止月份,按照职工卡号和月份查询记录,把起止月份之间的实发工资金额累加。
3.主要的程序段分析
职工工资信息的录入程序段
voidluru()
{
FILE*fp;
intk,,j,b,c,d;
if((fp=fopen("D:
工资信息.txt","w"))==NULL)从D盘中打开文件夹
{
printf("无法找到目标文件\n");
return;
}
label_1:
b=0;
while(!
(b>=1&&b<=12))
{
printf("请您输入您要建立的月份\n");//选择职工所在的月份
scanf("%d",&b);
}
b=b-1;
d=0;
while(!
(d>=10001&&d<=32767))
{输入职工的卡号
printf("请输入您要录入工资的卡号(五位数字),例如:
10001\n");
scanf("%d",&d);
}
for(i=0;i=d;i++);
if(a[i].kahao!
=d)
{
c=0;
while(c!
=1&&c!
=2)
{
printf("没有该卡号记录.\n1新建\n2返回上一级\n");
scanf("%d",&c);
}
if(c==2)
{
gotolabel_1;
}
if(c==1)
{
a[i].kahao=d;
printf("请输入姓名:
\n");
scanf("%s",a[i].xingming);输入职工的工资、水费、电费
a[i].m[b].yuefen=b+1;
printf("请输入此人该月的应发工资:
\n");
scanf("%f",&a[i].m[b].yfgz);
printf("请输入此人该月所用水费:
\n");
scanf("%f",&a[i].m[b].sf);
printf("请输入此人该月所用电费\n");
职工工资信息的查询
voidchaxun()
{
intb,i,j;
label_3:
b=0;
while(b!
=1&&b!
=2)
{
printf("1,选择姓名查询.\n2,选择卡号查询.\n");//选择姓名查询或卡号查询
scanf("%d",&b);
}
if(b==1)
{
charc[20];
printf("请输入您的姓名:
\n");
scanf("%s",c);
i=0;
while(!
(strcmp(a[i].xingming,c)==0)&&i{
i++;
}
if(i==ygsm)
{
printf("Thenameyouarelookingfordoesnotexist,pleaseenteryournameorcardnumberfor\n");//如果在数组中没有查找到职工的名字则输出此信息
return;
}
printf("%-10d%-20s\n",a[i].kahao,a[i].xingming);
for(j=0;a[i].m[j].yuefen!
=NULL;j++)
{
printf("月份:
%5d,应发工资:
%10.2f,水费:
%7.2f,电费:
%7.2f,税金:
%7.2f,实发工资:
%10.2f.\n",a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz);
}//当查询到职工的工资信息时,输出职工的工资信息
printf("总实发工资:
%10f\n",a[i].zsfgz);//输出职工的总发工资
四、调试过程(1.测试数据设计2.测试结果分析)
主菜单函数
职工的工资信息录入
查询职工的工资信息(姓名查询)
查询职工的工资信息(卡号查询)
浏览职工的工资信息
退出函数的运行界面
五、总结
1.设计中遇到的问题及解决过程
2.设计中产生的错误及原因分析
3.设计体会和收获。
一、
1.不知道从哪里开始编写程序。
解决方法:
先将题目的大概思路的先想清楚,然后在编写一个大概的程序段落。
2.有些知识没有完全熟悉,编写程序时容易出现格式错误。
解决方法:
再看一遍书上的例题,注意书写时的细节。
3.在编写时容易忘记自己编写到哪里了,还有什么功能没有实现。
解决方法:
将程序所需要实现的所有功能进行分段处理,一个功能用一个调用函数来实现,容易发现还有什么功能没有实现,运行出现错误时,也不需要从头开始找出错的地方。
二、
1.在编写时,经常出现死循环。
原因;在每个职工的信息输完后,没有直接跳出输入的界面,而是还在不断的需要输入信息,程序中没有设置跳出输入界面的函数。
2.编写的程序时,程序段有时不能运行。
原因:
在调用函数时,没有使用这个函数。
三、
通过这次的程序编写,使我加深了对C语言的理解和使用,并总结了以下的经验。
1.所有的程序都应先将程序的大体结构先编写出来,然后在将程序进行细化,这样层次比较清楚。
2.添加一些注释、流程图、说明文档使程序的思路更加清晰。
3.合并相同和相似的代码,编写成一个函数,在主程序中调用此函数。
4.注意大程序的设计最好按照“自顶向下,逐步细化,模块化”的方法进行
设计。
5.编写编写各个小函数时,要学会对运行结果的分析,并进行测试与调试。
6、在编程时,应该多使用库函数。
因为那些函数都是进过严格调试的,有很强的可移植性,同时也能提高函数的性能。
7、使用文件时要注意文件的打开和关闭。
8、在使用结构数组时,要特别注意对其初始化,还要特别注意不能出现越界。
9、最终最重要的一点还是要有严谨的编程思维,还要足够细心。
六、附录
1、原代码
2、参考文献
#include
#include
#defineN100
structmygz
{
intyuefen;
floatyfgz;
floatsf;
floatdf;
floatsj;
floatsfgz;
};
structworker
{
intkahao;
charxingming[20];
structmygzm[12];
floatzsfgz;
};
intygsm;
structworkera[N];
floatshuijin(floatm)
{
floatshui1,shui2;
floattmp;
shui1=0;shui2=0;
if(m>=1400)
{
shui1=(m-1400)*0.1;
shui2=30;
}
else
{
if(m>=800&&m<1400)
{
shui2=(m-800)*0.05;
}
}
tmp=shui1+shui2;
return(tmp);
}floatshifagongzi(floata,floatb,floatc,floatd)
{
floate=a-b-c-d;
return(e);
}
voidduqu()
{
FILE*fp;
if((fp=fopen("D:
工资信息.txt","r"))==NULL)
{
printf("Unabletoreadfile");
;return;
}
while(!
feof(fp))
{
fread(&a[ygsm],sizeof(structworker),1,fp);
ygsm++;
}
}
voidchaxun()
{
intb;
inti;
intj;
label_3:
b=0;
while(b!
=1&&b!
=2)
{
printf("1,选择姓名查询.\n2,选择卡号查询.\n");
scanf("%d",&b);
}
if(b==1)
{
charc[20];
printf("请输入您的姓名:
\n");
scanf("%s",c);
i=0;
while(!
(strcmp(a[i].xingming,c)==0)&&i{
i++;
}
if(i==ygsm)
{
printf("Thenameyouarelookingfordoesnotexist,pleaseenteryournameorcardnumberfor\n");
return;
}
printf("%-10d%-20s\n",a[i].kahao,a[i].xingming);
for(j=0;a[i].m[j].yuefen!
=NULL;j++)
{
printf("月份:
%5d,应发工资:
%10.2f,水费:
%7.2f,电费:
%7.2f,税金:
%7.2f,实发工资:
%10.2f.\n",a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz);
}
printf("总实发工资:
%10f\n",a[i].zsfgz);
b=0;
while(b!
=1&&b!
=2)
{
printf("1,继续查询.\n2,返回主菜单.\n");
scanf("%d",&b);
}
if(b==1)
{
gotolabel_3;
}
else
{
;return;
}
}
else
{
intd=0;
while(!
(d>=10001&&d<=32767))
{
printf("Pleaseenteryourcardnumber(fivedigits),例如:
10001\n");
scanf("%d",&d);
}
i=0;
while(a[i].kahao!
=d&&i{
i++;
}
if(i==ygsm)
{
printf("Thenameyouarelookingfordoesnotexist,pleaseenteryournameorcardnumberfor\n");
return;
}
printf("%-10d%-20s\n",d,a[i].xingming);
for(j=0;a[i].m[j].yuefen!
=NULL;j++)
{
printf("月份:
%5d,应发工资:
%10.2f,水费:
%7.2f,电费:
%7.2f,税金:
%7.2f,实发工资:
%10.2f.\n",a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz);
}
printf("总实发工资:
%10f\n",a[i].zsfgz);
b=0;
while(b!
=1&&b!
=2)
{
printf("1,继续查询.\n2,返回主菜单.\n");
scanf("%d",&b);
}
if(b==1)
{
gotolabel_3;
}
else
{
;return;
}
}
}
voidliulan()
{
structworkerx;
intc;
floatd;
inti;
intj;
intk;
for(i=0;i{
c=a[i].kahao;
k=i;
for(j=i+1;j{
if(c>a[j].kahao)
{
c=a[j].kahao;
k=j;
}
}
x=a[i];
a[i]=a[k];
a[k]=x;
}
for(i=0;i{
printf("%-10d%-20s\n",a[i].kahao,a[i].xingming);
for(j=0;a[i].m[j].yuefen!
=NULL;j++)
{
printf("月份:
%5d,应发工资:
%10.2f,水费:
%7.2f,电费:
%7.2f,税金:
%7.2f,实发工资:
%10.2f.\n",a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz);
}
printf("总实发工资:
%10f\n",a[i].zsfgz);
}
for(i=0;i<40;i++)
{
printf("\n");
}
for(i=0;i{
d=a[i].zsfgz;
k=i;
for(j=i+1;j{
if(d{
d=a[j].zsfgz;
k=j;
}
}
x=a[i];
a[i]=a[k];
a[k]=x;
}
for(i=0;i{
printf("%-20s%-10d\n",a[i].xingming,a[i].kahao);
for(j=0;a[i].m[j].yuefen!
=NULL;j++)
{
printf("月份:
%5d,应发工资:
%10.2f,水费:
%7.2f,电费:
%7.2f,税金:
%7.2f,实发工资:
%10.2f.\n",a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz);
}
printf("总实发工资:
%10f\n",a[i].zsfgz);
}
}
voidshanchu()
{
FILE*fp;
intb;
intc;
inti;
intj;
label_4:
printf("请输入要删除信息的卡号:
\n");
scanf("%d",&b);
for(i=0;i{
if(a[i].kahao==b)
{
j=i;
}
}
for(i=j+1;i{
a[i-1]=a[i];
}
ygsm--;
fp=fopen("D:
工资信息.txt","w");
for(i=0;i{
fwrite(&a[i],sizeof(structworker),1,fp);
}
fclose(fp);
c=0;
while(c!
=1&&c!
=2)
{
printf("1.继续删除\n2返回主菜单\n");
scanf("%d",&c);
}
if(c==1)
{
gotolabel_4;
}
else
{
return;
}
}
voidluru()
{
FILE*fp;
intk;
inti;
intj;
intb;
intc;
intd;
if((fp=fopen("D:
工资信息.txt","w"))==NULL)
{
printf("无法找到目标文件\n");
return;
}
label_1:
b=0;
while(!
(b>=1&&b<=12))
{
printf("请您输入您要建立的月份\n");
scanf("%d",&b);
}
b=b-1;
d=0;
while(!
(d>=10001&&d<=32767))
{
printf("请输入您要录入工资的卡号(五位数字),例如:
10001\n");
scanf("%d",&d);
}
for(i=0;i=d;i++);
if(a[i].kahao!
=d)
{
c=0;
while(c!
=1&&c!
=2)
{
printf("没有该卡号记录.\n1新建\n2返回上一级\n");
scanf("%d",&c);
}
if(c==2)
{
gotolabel_1;
}
if(c==1)
{
a[i].kahao=d;
printf("请输入姓名:
\n");
scanf("%s",a[i].xingming);
a[i].m[b].yuefen=b+1;
printf("请输入此人该月的应发工资:
\n");
scanf("%f",&a[i].m[b].yfgz);
printf("请输入此人该月所用水费:
\n");
scanf("%f",&a[i].m[b].sf);
printf("请输入此人该月所用电费\n");
scanf("%f",&a[i].m[b].df);
a[i].m[b].sj=shuijin(a[i].m[b].yfgz);
a[i].m[b].sfgz=shifagongzi(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj);
a[i].zsfgz=0;
for(k=0;k<12;k++)
{
a[i].zsfgz+=a[i].m[k].sfgz;
}
ygsm++;
c=0;
while(c!
=1&&c!
=2)
{
printf("1继续\n2返回主菜单\n");
scanf("%d",&c);
}
if(c==1)
{
gotolabel_1;
}
if(c==2)
{
gotolabel_2;
}
}
}
else
{
if(a[i].m[b].yuefen==b+1)
{
c=0;
while(c!
=1&&c!
=2)
{
printf("已有该月记录\n1覆盖原有记录\n2返回上级\n");
scanf("%d",&c);
}
if(c==1)
{
printf("请输入此人该月的应发工资:
\n");
scanf("%d",&a[i].m[b].yfgz);
printf("请输入此人该月所用水费:
\n");
scanf("%d",&a[i].m[b].sf);
printf("请输入此人该月所用电费\n");
scanf("%d",&a[i].m[b].df);
a[i].m[b].sj=shuijin(a[i].m[b].yfgz);
a[i].m[b].sfgz=shifagongzi(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj);
a[i].zsfgz=0;
for(k=0;k<12;k++)
{
a[i].zsfgz+=a[i].m[k].sfgz;
}
while(c!
=1&&c!
=2)
{
printf("1继续\n2返回主菜单\n");
scanf("%d",&c);
}
if(c==1)
{
gotolabel_1;
}
if(c==2)
{
gotolabel_2;
}
}
else
{
gotolabel_1;
}
}
if(a[i].m[b].yuefen==NULL)
{
a[i].m[b].yuefen=b+1;
printf("请输入此人该月的应发工资:
\n");
scanf("%f",&a[i].m[b].yfgz);
printf("请输入此人该月所用水费:
\n");
scanf("%f",&a[i].m[b].sf);
printf("请输入此人该月所用电费\n");
scanf("%f",&a[i].m[b].df);
a[i].m[b].sj=shuijin(a[i].m[b].yfgz);
a[i].m[b].sfgz=shifagongzi(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj);
a[i].zsfgz=0;
for(k=0;k<12;k++)
{
a[i].zsfgz+=a[i].m[k].sfgz;
}
c=0;
while(c!
=