当前位置:文档之家› C语言实训项目分析及源码

C语言实训项目分析及源码

防灾科技学院实习报告书防灾科技学院灾害信息工程系2015年制项目一C语言实习一、实习目的本课程是网络工程专业的一门专业必修课程,是学生学习完C语言程序设计专业基础课程后,进一步学习其他专业课程前必须完成的一项实践教学环节。

本次实习通过1个综合性强、实用性强、趣味性强的应用实例,使学生进一步巩固C语言基本知识,掌握应用程序设计语言描述问题、分析问题和解决问题的方法和思想,为后继的面向对象程序设计、数据结构、Web应用技术、网络工程专业实习、网络工程生产实习、网络工程毕业实习课程等课程打下基础。

通过本课程的学习,使学生进一步明确学习目标、增强学习动力、培养学习兴趣。

二、实习任务概述任务一:员工工资管理系统的设计与实现本系统基于C语言,实现了一个小型的信息管理系统,主要包括以下功能:1.信息的录入:a)首次进入系统,可以添加职工的工号、姓名、基本工资、津贴、员工奖金等数据录入操作。

b)系统再次登录,可以从文件导入信息,也可以对文件内容进行修改,保存退出。

2.删除操作:对离职的员工信息要从系统里删除。

3.显示操作:将结构体中职工信息输出到屏幕上。

4.查询与修改操作:分别按职工工号和职工姓名查询,修改职工信息并保存。

5.统计与排序操作:分别统计所有员工的总工资,实现对总工资的排序。

三、实习所用软件简介VC++6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库。

使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。

使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。

Visual C++6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。

比如,它允许用户进行远程调试,单步执行等。

还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。

其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。

这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。

四、参考文献[1] 韩莹.C语言实训教程[M].北京交通大学出版社,2013.[2] 李新良.教学测评系统的应用与研究[J].湖南人文科技学院学报,2012(6):73-77.[3] 张高煜.C语言程序设计实训.中国水利水电出版社,2011.8.[4] 白帆.C语言开发实例详解.电子工业出版社,2012.5.[5] 王为青.C语言实战105例.北京:人民邮电出版社,2011.[6]明日科技编著.C语言项目案例分析.北京:清华大学出版社,2012.五、实习日程安排六、实习内容及步骤任务1 员工工资管理系统(C语言模块)1.1 系统开发思路(需求分析)随着计算机技术的发展,企业管理越来越趋于自动化,而工资管理是企业管理的重要的组成部分,它与企业的财务管理、人才管理有着密切的联系。

由于企业员工工资结构存在一定的规律性,工资放在时间上和操作上存在的一定的重复性,这使得企业事业单位工资管理计算机的实现成为了可能。

1.2 数据结构设计struct Worker{char workernum[10];char workername[20];int basicwage;int allowance;int Bonus;int totalwage;}Worker_Infor[100];1.3 系统设计与实现1.3.1系统功能结构图及流程图图1-1员工工资管理系统参考模块图.1.3.2 主要函数设计void Input_Infor() 函数功能:员工信息的录入void Print_Worker(int i)函数功能:员工工资的显示void delet_worker() 函数功能:删除员工信息int Search_Name() 函数功能:姓名查询int Search_Num() 函数功能:工号查询int Search_Worker() 函数功能:查询主函数,调用姓名/工号查询void Modify_Worker() 函数功能:修改员工信息void Cal_Wages() 函数功能:计算总工资void Sort_Wage() 函数功能:对员工工资排序int Save_Infor() 函数功能:文件写操作void Up_Infor() 函数功能:读文件void Input_worker(int i) 函数功能:添加新的员工信息void main() 函数功能:主函数选择进入界面1.3.3 系统功能设计与实现下面分别对该模块中的具体功能进行详细描述,主要功能实现的代码相应功能实现的界面截图。

1.---------------------------------------//主函数void main(){int c,t=1,i;Up_Infor();printf("输入员工数量:");scanf("%d",&n);while(t){printf("#######################################################\n"); printf ("## 欢迎进入职工工资管理系统: ##\n");printf ("## 1.录入员工信息 ##\n"); printf ("## 2.职工总工资进行排序 ##\n"); printf ("## 3.文件保存到硬盘上 ##\n"); printf ("## 4.查询员工信息 ##\n"); printf ("## 5.修改员工信息 ##\n"); printf ("## 6.查看所有员工信息 ##\n"); printf ("## 7.添加员工信息 ##\n"); printf ("## 8.删除员工信息 ##\n"); printf ("## 9.退出程序 ##\n"); printf("## ##\n"); printf ("## 请选择对应的编号(1—7) ##\n"); printf ("#######################################################\n");scanf("%d",&c);getchar();if (c<1||10<c){printf ("\t输入错误,请重新输入:\n");continue ;} switch(c){case 1:Input_Infor();Cal_Wages();break;case 2:Sort_Wage();break;case 3:Save_Infor();printf ("\t按任意键继续!\n");getchar();break;case 4:Search_Worker();break;case 5:Modify_Worker();break;case 6:for (i=0;i<n;i++)Print_Worker(i);break;case 7:Input_worker(i);break;case 8:delet_worker();break;case 9:t=0;printf ("\t谢谢使用!\n");printf ("\t按任意键返回!");break;}}}图1-32.----------------------------------------//读文件void Up_Infor(){int i;FILE *pk;pk=fopen("D:\\worker.txt","at+");for (i=0;i<100;i++){fscanf(pk,"%-10s%-8s\t%-10d%-10d%-10d%-10d\t\n",Worker_Infor[i ].workernum,Worker_Infor[i].workername,Worker_Infor[i].basicwage, Worker_Infor[i].allowance,Worker_Infor[i].Bonus,Worker_Infor[i].t otalwage);if (strcmp(Worker_Infor[i].workernum,"stop")==0)break;}fclose(pk);}3.------------------------------//员工信息的录入void Input_Infor(){char c;int i;if (n==0)i=0;else i=n-1;printf ("\t请输入职工工资信息!\n");while (1){printf ("\t请输入第%d位职工编号:",i+1);//gets(Worker_Infor[i].workernum);scanf("%s",Worker_Infor[i].workernum);getchar();printf ("\t工号为%s职工的姓名:",Worker_Infor[i].workernum);gets(Worker_Infor[i].workername);printf ("\t%s职工基本工资:",Worker_Infor[i].workername);while(1){scanf("%d",&Worker_Infor[i].basicwage);if (Worker_Infor[i].basicwage>=0)break;else printf ("\t输入错误,请重试!");}printf ("\t%s职工的津贴:",Worker_Infor[i].workername);while(1){scanf("%d",&Worker_Infor[i].allowance);if (Worker_Infor[i].allowance>=0)break;else printf ("\t输入错误,重新输入:");}printf ("\t%s职工的奖金:",Worker_Infor[i].workername);while(1){scanf("%d",&Worker_Infor[i].Bonus);if (Worker_Infor[i].Bonus>=0)break;else printf ("\t输入错误,重新输入:");}i++;n=i;getchar();printf ("\n是否继续输入:(Y/N )或者 (y/n):");scanf ("%c",&c);if (c=='n'||c=='N')break;}}图1-44.-----------------------------------//对员工工资排序void Sort_Wage(){int i,j;int Worker_temp;Cal_Wages();for (i=0;i<n;i++){for (j=i+1;j<n;j++)if (Worker_Infor[j].totalwage<= Worker_Infor[i].totalwage){Worker_temp=Worker_Infor[i].totalwage;Worker_Infor[i].totalwage=Worker_Infor[j].totalwage;Worker_Infor[j].totalwage=Worker_temp;}}for (i=0;i<n;i++)printf("%-10s%-8s\t%-10d%-10d%-10d%-10d\t\n",Worker_Infor[i].workernum, Worker_Infor[i].workername,Worker_Infor[i].basicwage,Worker_Infor [i].allowance,Worker_Infor[i].Bonus,Worker_Infor[i].totalwage);}图1-55.---------------//文件写操作,文件保存到硬盘上int Save_Infor(){int i;FILE *pk;Cal_Wages();if ((pk=fopen("D:\\worker.txt","wr+"))==NULL){printf ("文件打开失败!");return 0;}for (i=0;i<n;i++){fprintf(pk,"%-10s%-8s\t%-10d%-10d%-10d%-10d\t\n",Worker_Infor[ i].workernum,Worker_Infor[i].workername,Worker_Infor[i].basicwage ,Worker_Infor[i].allowance,Worker_Infor[i].Bonus,Worker_Infor[i]. totalwage);}fclose(pk);printf ("文件保存成功!");return 1;}图1-66.-----------------//查询员工信息int Search_Worker(){int i,m;printf ("请选择查询方式:\n1.按姓名查找\n2.按员工工号查找\n3.退出\n");scanf ("%d",&m);switch(m){case 1:i=Search_Name();return i ;break;case 2:i=Search_Num();return i ;break;case 3:return -1;}}6.1--------------------------------//姓名查询int Search_Name(){int i;char name[20];printf ("请输入要查询的姓名:");scanf ("%s",name);for (i=0;i<n;i++){if (strcmp(name,Worker_Infor[i].workername)==0){printf("%-10s%-8s\t%-10d%-10d%-10d%-10d\t\n",Worker_Infor[i].workernum, Worker_Infor[i].workername,Worker_Infor[i].basicwage,Worker_Infor [i].allowance,Worker_Infor[i].Bonus,Worker_Infor[i].totalwage);return i;break;}}if (i==n){printf ("没有找到该员工!\n");return -1;}//else return i;}图1-76.2---------------------------//按工号查询int Search_Num(){int i;char num[20];printf ("请输入要查询的工号:");scanf ("%s",num);for (i=0;i<n;i++){if (strcmp(num,Worker_Infor[i].workernum)==0){printf("%-10s%-8s\t%-10d%-10d%-10d%-10d\t\n",Worker_Infor[i].workernum, Worker_Infor[i].workername,Worker_Infor[i].basicwage,Worker_Infor [i].allowance,Worker_Infor[i].Bonus,Worker_Infor[i].totalwage);return i;break;}}if (i==n){printf ("没有找到该员工!\n");return -1;}//else return i;}图1-87.--------------------------//修改员工信息void Modify_Worker(){int i,m;printf ("请查询您要修改的员工:\n");i=Search_Worker();getchar();printf("#######################################################\n");printf ("## 请选择您要修改的内容: ##\n");printf ("## 1.员工号 ##\n");printf("## 2.员工姓名 ##\n");printf ("## 3.员工的基本工资 ##\n");printf ("## 4.员工的津贴 ##\n");printf("## 5.员工的奖金 ##\n");printf("## 6.退出 ##\n");printf("#######################################################\n");scanf ("%d",&m);switch(m){case 1:printf ("请输入新的员工号:");scanf ("%s",&Worker_Infor[i].workernum);break;case 2:printf ("请输入新的员工名:");scanf ("%s",&Worker_Infor[i].workername);break;case 3:printf ("请输入新的员工基本工资:");scanf ("%d",&Worker_Infor[i].basicwage);break;case 4:printf ("请输入新的员工津贴:");scanf("%d",&Worker_Infor[i].allowance);break;case 5:printf ("请输入新的员工奖金:");scanf ("%d",&Worker_Infor[i].Bonus);break;case 6:return;}printf ("修改后的员工的基本信息为:\n");Print_Worker(i);}图1-98.---------------//查看所有员工信息void Print_Worker(int i){printf("%-10s%-8s\t%-10d%-10d%-10d%-10d\t\n",Worker_Infor[i].workernum, Worker_Infor[i].workername,Worker_Infor[i].basicwage,Worker_Infor [i].allowance,Worker_Infor[i].Bonus,Worker_Infor[i].totalwage);}图1-109.-------------------//添加新的员工信息void Input_worker(int i){char c;printf("\t请输入职工工资信息:\n");while(1){printf("\t第%d位职工的编号:",n+1);gets(Worker_Infor[i].workernum);printf("\t工号为%s职工的姓名:",Worker_Infor[n].workernum);gets(Worker_Infor[n].workername);printf("\t%s职工的基本工资:",Worker_Infor[n].workername);while(1){scanf("%d",&Worker_Infor[n].basicwage);if(Worker_Infor[n].basicwage>=0)break;else printf("\t输入错误请重试:");}printf("\t%s职工的津贴:",Worker_Infor[n].workername);while(1){scanf("%d",&Worker_Infor[n].allowance);if(Worker_Infor[n].allowance>=0)break;else printf("\t输入错误请重试:");}printf("\t%s职工的奖金:",Worker_Infor[n].workername);while(1){scanf("%d",&Worker_Infor[n].Bonus);if(Worker_Infor[n].Bonus>=0)break;else printf("\t输入错误请重试:");}i++;n++;getchar();printf("是否想要输入下一个员工信息(Y/N):");scanf("%c",&c);if(c=='N'||c=='n')break;getchar();}}图1-11图1-1210.----------------//删除员工信息void delet_worker(){int i,k=0;char name[20];printf("输入需要删除的员工姓名:");scanf("%s",name);for(i=0;i<n-1;i++){if(strcmp(name,Worker_Infor[i].workername)==0);break;} while(1){strcpy(Worker_Infor[i].workername,Worker_Infor[i+1].workername );strcpy(Worker_Infor[i].workernum,Worker_Infor[i].workernum);Worker_Infor[i].allowance=Worker_Infor[i].allowance;Worker_Infor[i].basicwage=Worker_Infor[i+1].basicwage;Worker_Infor[i].Bonus=Worker_Infor[i+1].Bonus;Worker_Infor[i].totalwage=Worker_Infor[i+1].totalwage;Print_Worker(i);i++;if(i==n-1)break;}}图1-13图1-141.4 结论1.4.1 本次实习取得的成绩第一次接触到这样多的代码的书写,不仅锻炼了自己的编程能力,而且学会了坚持的精神。

相关主题