C语言实训项目分析及源码详解.docx
《C语言实训项目分析及源码详解.docx》由会员分享,可在线阅读,更多相关《C语言实训项目分析及源码详解.docx(46页珍藏版)》请在冰点文库上搜索。
![C语言实训项目分析及源码详解.docx](https://file1.bingdoc.com/fileroot1/2023-5/30/758e9eb0-ff1e-4ac4-9dd4-1ba5a0cbe6f2/758e9eb0-ff1e-4ac4-9dd4-1ba5a0cbe6f21.gif)
C语言实训项目分析及源码详解
防灾科技学院
实习报告书
实习题目:
语言)网络工程认识实习(C
学号:
###
姓名:
###
专业:
网络工程
系别:
###
实习时间:
2015.5-2015.6
实习地点:
北504
指导教师:
孙晓玲杜春雷
考勤成绩:
10
实习态度:
10
任务完成:
40
实习报告:
20
实习日志:
20
实习总成绩
100
指导教师评语
指导教师(签名):
2015年7月日
防灾科技学院灾害信息工程系
2015年制1/35
项目一C语言实习
一、实习目的
本课程是网络工程专业的一门专业必修课程,是学生学习完C语言程序设计专业基础课程后,进一步学习其他专业课程前必须完成的一项实践教学环节。
本次实习通过1个综合性强、实用性强、趣味性强的应用实例,使学生进一步巩固C语言基本知识,掌握应用程序设计语言描述问题、分析问题和解决问题的方法和思想,为后继的面向对象程序设计、数据结构、Web应用技术、网络工程专业实习、网络工程生产实习、网络工程毕业实习课程等课程打下基础。
通过本课程的学习,使学生进一步明确学习目标、增强学习动力、培养学习兴趣。
二、实习任务概述
任务一:
员工工资管理系统的设计与实现
本系统基于C语言,实现了一个小型的信息管理系统,主要包括以下功能:
1.信息的录入:
a)首次进入系统,可以添加职工的工号、姓名、基本工资、津贴、员工奖金等数据录入操作。
b)系统再次登录,可以从文件导入信息,也可以对文件内容进行修改,保存退出。
2.删除操作:
对离职的员工信息要从系统里删除。
3.显示操作:
将结构体中职工信息输出到屏幕上。
4.查询与修改操作:
分别按职工工号和职工姓名查询,修改职工信息并保存。
5.统计与排序操作:
分别统计所有员工的总工资,实现对总工资的排序。
三、实习所用软件简介
VC++6.0是Microsoft公司推出的一个基于Windows系统平台、可视化的集成开发环境,它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(MicrosoftFoundationClass)类库。
使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。
使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用2/35
程序开发变得简单。
VisualC++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-2天员工信息
选题,对第一个选题进行功能需求分析、功能结构图和流程图的设计、系统架构设计数员员员员据工工工工文信工信工件资息资息
第3-5天的录入
核心算法设计,程序设计及编码,逐步完善建立数据文件,增加数据,修改数据,查询数据,删除数据,对数据?
?
序和屏幕显示数据等功能保查汇修排存询总改序选
第6-7天
代码调试、测试、撰写实习报告按按择姓工查名号询查查
六、实习内容及步骤
任务1员工工资管理系统(C语言模块)
1.1系统开发思路(需求分析)
随着计算机技术的发展,企业管理越来越趋于自动化,而工资管理是企业管理的重要的组成部分,它与企业的财务管理、人才管理有着密切的联系。
由于企业员工工资结构存在一定的规律性,工资放在时间上和操作上存在的一定3/35
的重复性,这使得企业事业单位工资管理计算机的实现成为了可能。
1.2数据结构设计
structWorker
{
charworkernum[10];
charworkername[20];
intbasicwage;
intallowance;
intBonus;
inttotalwage;
}Worker_Infor[100];
1.3系统设计与实现
1.3.1系统功能结构图及流程图
职工管理系统
.
图1-1员工工资管理系统参考模块图/435
开始
主操作界面录N
入主操作界面职继续?
1
选择工信Y
息2
选择3
选择4
选择5
选择6
选择选择7选择89选择
职工总工资排序
录入数据文件保存
按姓名查找
查询员工信息
按工号查找
退出,回到主页面
修改员工信息
修改
选择查询方式
选择修改选项
删除
查看所有员工信息
添加新的员工信息
删除员工信息
输入要删除的员工姓名
退出程序
35/5
.
员工工资管理系统流程图1-2图
1.3.2主要函数设计
voidInput_Infor()函数功能:
员工信息的录入
voidPrint_Worker(inti)函数功能:
员工工资的显示
voiddelet_worker()函数功能:
删除员工信息
intSearch_Name()函数功能:
姓名查询
函数功能:
工号查询intSearch_Num()
函数功能:
查询主函数,调用姓名/工号查intSearch_Worker()
询
voidModify_Worker()函数功能:
修改员工信息
voidCal_Wages()函数功能:
计算总工资
voidSort_Wage()函数功能:
对员工工资排序
intSave_Infor()函数功能:
文件写操作
voidUp_Infor()函数功能:
读文件
voidInput_worker(inti)函数功能:
添加新的员工信息
voidmain()函数功能:
主函数选择进入界面
1.3.3系统功能设计与实现
下面分别对该模块中的具体功能进行详细描述,主要功能实现的代码相应功能实现的界面截图。
1.---------------------------------------//主函数
voidmain()
{
intc,t=1,i;
Up_Infor();
牰湩晴尨输入员工数量:
);
scanf(%d,&n);
while(t)
{
printf
(#######################################################\n);
6/35
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\n);continue;}
switch(c)
{
case1:
Input_Infor();Cal_Wages();break;
case2:
Sort_Wage();break;
case3:
Save_Infor();printf(\按任意键继续!
\n);getchar();break;
case4:
Search_Worker();break;
case5:
Modify_Worker();break;
case6:
for(i=0;icase7:
Input_worker(i);break;
case8:
delet_worker();break;
case9:
t=0;printf(\谢谢使用!
\n);printf(\按任意键
返回!
);break;
}
35/7
}
}
图1-3
2.----------------------------------------//读文件
voidUp_Infor()
{
inti;
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].totalwage);
if(strcmp(Worker_Infor[i].workernum,stop)==0)break;
35/8
}
fclose(pk);
}
3.------------------------------//员工信息的录入voidInput_Infor()
{
charc;
inti;
if(n==0)i=0;
elsei=n-1;
\n);请输入职工工资信息!
printf(\while
(1)
{
:
i+1);位职工编号请输入第%dprintf(\//gets(Worker_Infor[i].workernum);
scanf(%s,Worker_Infor[i].workernum);
getchar();
姓工的号为%s职printf
(\工:
Worker_Infor[i].workernum);
名gets(Worker_Infor[i].workername);
工工基本printf
(\%s职:
Worker_Infor[i].workername);
资
while
(1)
{
scanf(%d,&Worker_Infor[i].basicwage);
if(Worker_Infor[i].basicwage>=0)
break;
!
);
elseprintf(\输入错误,请重试}
9/35
printf(\%s职工的津贴:
Worker_Infor[i].workername);
while
(1)
{
scanf(%d,&Worker_Infor[i].allowance);
if(Worker_Infor[i].allowance>=0)
break;
elseprintf(\输入错误,重新输入:
);
}
Worker_Infor[i].workername);printf(\%s职工的奖金:
while
(1)
{
scanf(%d,&Worker_Infor[i].Bonus);
if(Worker_Infor[i].Bonus>=0)
break;
elseprintf(\输入错误,重新输入:
);
}
i++;
n=i;
getchar();
(y/n):
);或者(Y/N)printf(\
是否继续输入:
scanf(%c,&c);
if(c=='n'||c=='N')break;
}
}
10/35
1-4
图
对员工工资排序4.-----------------------------------//voidSort_Wage()
{
inti,j;
intWorker_temp;
Cal_Wages();
for(i=0;i{
for(j=i+1;j(Worker_Infor[j].totalwage<=if
Worker_Infor[i].totalwage)
{
Worker_temp=Worker_Infor[i].totalwage;
/1135
Worker_Infor[i].totalwage=Worker_Infor[j].totalwage;
Worker_Infor[j].totalwage=Worker_temp;
}
}
for(i=0;iprintf
(%-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-5
5.---------------//文件写操作,文件保存到硬盘上
intSave_Infor()
{
12/35
inti;
FILE*pk;
Cal_Wages();
if((pk=fopen(D:
\\worker.txt,wr+))==NULL)
{
牰湩晴?
文件打开失败!
);
return0;
}
for(i=0;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);
牰湩晴?
文件保存成功!
);
return1;
}
13/35
图1-6
6.-----------------//查询员工信息
intSearch_Worker()
{
inti,m;
printf尨请选择查询方式:
\n1.按姓名查找\n2.按员工工号查找\n3.退出\n);
scanf(%d,&m);
switch(m)
{
case1:
i=Search_Name();returni;break;
case2:
i=Search_Num();returni;break;
case3:
return-1;
}
}
6.1--------------------------------//姓名查询intSearch_Name()
{
inti;
charname[20];
:
);牰湩晴?
请输入要查询的姓名scanf(%s,name);
for(i=0;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);
returni;break;}
35/14
}
if(i==n)
{
牰湩晴?
没有找到该员工!
\n);return-1;
}
//elsereturni;
}
图1-7
6.2---------------------------//按工号查询
intSearch_Num()
{
inti;
charnum[20];
牰湩晴?
请输入要查询的工号:
);
scanf(%s,num);
for(i=0;i{
if(strcmp(num,Worker_Infor[i].workernum)==0)
35/15
{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);
returni;break;}
}
if(i==n)
{
!
\n);return-1;牰湩晴?
没有找到该员工}
//elsereturni;
}
图1-8
7.--------------------------//修改员工信息
voidModify_Worker()
16/35
{
inti,m;
牰湩晴?
请查询您要修改的员工:
\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)
{
case1:
printf尨请输入新的员工号:
);scanf
(%s,&Worker_Infor[i].workernum);break;
case2:
printf尨请输入新的员工名:
);scanf
(%s,&Worker_Infor[i].workername);break;
case3:
printf尨请输入新的员工基本工资:
);scanf
(%d,&Worker_Infor[i].basicwage);break;
case4:
printf尨请输入新的员工津贴:
);scanf(%d,&Worker_Infor[i].allowance);break;
case5:
printf尨请输入新的员工奖金:
);scanf
(%d,&Worker_Infor[i].Bonus);break;
case6:
return;
35/17
}
牰湩晴?
修改后的员工的基本信息为:
\n);
Print_Worker(i);
}
图1-9
8.---------------//查看所有员工信息voidPrint_Worker(inti)
{
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);
}18/35
1-10
图添加新的员工信息9.-------------------//voidInput_worker(inti){
charc;
:
\n);请输入职工工资信息printf(\while
(1){
:
n+1);%d位职工的编号prin