C语言课程设计实验报告.docx
- 文档编号:681538
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:28
- 大小:70.34KB
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"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 实验 报告