沈阳理工大学C语言课程设计DOC.docx
《沈阳理工大学C语言课程设计DOC.docx》由会员分享,可在线阅读,更多相关《沈阳理工大学C语言课程设计DOC.docx(39页珍藏版)》请在冰点文库上搜索。
沈阳理工大学C语言课程设计DOC
课程设计任务书
学院
信息科学与工程
专业
通信工程
学生姓名
李祥滢
学号
1003060219
设计题目
C语言课程设计
内容及要求:
加深对C语言基础知识的掌握,使用C语言编程实现以下题目的设计。
题目名称:
数字的组成及删除指定位置的字符,工资统计的设计
内容及要求:
1、编程:
用0—9之间不同的三个数字构成一个三位数,统计有多少个这样的三位数。
2、规定输出的字符串中只能包含字母和*号,编写函数fun(char*a,intn),其功能是:
是字符串前边连续的*号不多于n个;若多于n个,则删除多于的*号,若小于或等于n个,则什么也不做。
例如:
若输入字符串为******A*BC*DEF*G***,n的值为4,则删除后的字符串应是:
****A*BC*DEF*G***
3、工资统计程序设计
设计结构体数组,结构中包含职工数据为:
编号、姓名、部门、应付工资、保险、税金、实付工资。
其中实付工资有公式计算得到:
实付工资=应付工资-保险-税金
设计各个函数,分别实现以下功能:
(1)输入职工数据,其中“实付工资”通过计算得到
(2)显示全部职工数据
(3)输入其部门值、显示该部门职工的数据,工资总额,平均工资
设计菜单,通过选择菜单调用以上函数。
软件开发环境
WindowsXP,TC2.0或VisualC++6.0
进度安排:
第18周:
C语言基础知识练习
第18周:
算法设计
第19周:
编写程序代码与程序调试
第19周:
答辩、验收程序
指导教师(签字):
年月日
学院院长(签字):
年月日
目录
一、题目要求1
二、算法设计2
三、编程实现3
四、结果分析6
五、参考文献9
一、题目要求
题目名称:
数字的组成及删除指定位置的字符,工资统计的设计
内容:
1、编程:
用0—9之间不同的三个数字构成一个三位数,统计有多少个这样的三位数。
2、规定输出的字符串中只能包含字母和*号,编写函数fun(char*a,intn),其功能是:
是字符串前边连续的*号不多于n个;若多于n个,则删除多于的*号,若小于或等于n个,则什么也不做。
例如:
若输入字符串为******A*BC*DEF*G***,n的值为4,则删除后的字符串应是:
****A*BC*DEF*G***
3、工资统计程序设计
设计结构体数组,结构中包含职工数据为:
编号、姓名、部门、应付工资、保险、税金、实付工资。
其中实付工资有公式计算得到:
实付工资=应付工资-保险-税金
设计各个函数,分别实现以下功能:
(4)输入职工数据,其中“实付工资”通过计算得到
(5)显示全部职工数据
(6)输入其部门值、显示该部门职工的数据,工资总额,平均工资
设计菜单,通过选择菜单调用以上函数。
要求:
使用C语言完成上述程序的设计、编程和调试,开发环境可采用TurboC2.0、WinTC或VisualC++6.0等。
二、算法设计
编程:
用0—9之间不同的三个数字构成一个三位数,统计有多少个这样的三位数:
1通过设计for循环,分别输出三位数的各位数字,并累加所有符合条件的三位数。
2、规定输出的字符串中只能包含字母和*号,编写函数fun(char*a,intn),其功能是:
是字符串前边连续的*号不多于n个;若多于n个,则删除多于的*号,若小于或等于n个,则什么也不做。
例如:
若输入字符串为******A*BC*DEF*G***,n的值为4,则删除后的字符串应是:
****A*BC*DEF*G***:
1fun(char*a,intn),函数功能:
是字符串前边连续的*号不多于n个;若多于n个,则删除多于的*号,若小于或等于n个,则什么也不做
主函数功能:
输入一个修改前的字符串,输入一个自然数n,输出修改后的字符串!
3、3、工资统计程序设计
设计结构体数组,结构中包含职工数据为:
编号、姓名、部门、应付工资、保险、税金、实付工资。
其中实付工资有公式计算得到:
实付工资=应付工资-保险-税金
设计各个函数,分别实现以下功能:
(7)输入职工数据,其中“实付工资”通过计算得到
(8)显示全部职工数据
(9)输入其部门值、显示该部门职工的数据,工资总额,平均工资
设计菜单,通过选择菜单调用以上函数。
1、每个函数的功能:
(1)voidinput();录入:
输入职工数据,其中"实付工资"通过计算得到
(2)voiddel();)删除:
删除指定的职工信息(输入姓名,若找到则删除该信息
(3)voidmod();修改:
允许对已经录入的数据重新进行编辑、修改
(4)voidshow_all();显示:
显示全体职工数据;
(5)voidshow_name();查询:
a.输入职工姓名,显示该职工的全部数据b.输入某部门值,显示该部门职工的数据、工资总额、平均工资。
(6)voidshow_dep();退出程序
三、编程实现
程序的具体C语言代码如下:
第1题:
}#include
voidmain()
{
inti,j,k,count=0;
for(i=1;i<=9;i++)
{
for(j=0;j<=9;j++)
{
for(k=1;k<=9;k++)
{
if(i!
=j&&j!
=k&&i!
=k)
{
printf("%3d%d%d",i,j,k);
count++;
}
}
}
}
printf("种数构成方法:
");
printf("%d",count);
}
第2题:
#include
intfun(char*s,intn)
{
intflag=1;
for(inti=0;iif(s[i]!
='*')
{
flag=0;
break;
}
if(flag==0)
return0;
else
{
intk=n;
while(s[k]!
='\0')//移动到非*字符
{
if(s[k]=='*')
k++;
else
break;
}
intj=0;
while(s[k]!
='\0')//向前复制
{
s[n+j]=s[k];
k++;
j++;
}
s[n+j]='\0';
}
return1;
}
voidmain()
{
staticcharstr[15];
intm;
printf("请输入一个只含*和字母的字符串:
");
scanf("%s",str);
printf("请输入n值:
");
scanf("%d",&m);
fun(str,m);
printf("%s",str);
}
第3题:
#include
#include
#include
#include
/*
编号、姓名、部门、应付工资、保险、税金、实付工资。
其中实付工资由公式计算得到:
实付工资=应付工资-保险-税金
*/
structemployee
{
Stingm_num;//编号
Stingm_name;//姓名
Stingm_dep;//部门
doublem_salary;//应付工资
doublem_insurance;//保险
doublem_tax;//税金
};
/*
(1)录入:
输入职工数据,其中"实付工资"通过计算得到;
(2)删除:
删除指定的职工信息(输入姓名,若找到则删除该信息)
(3)修改:
允许对已经录入的数据重新进行编辑、修改;
(4)显示:
显示全体职工数据;
(5)查询:
a.输入职工姓名,显示该职工的全部数据;
b.输入某部门值,显示该部门职工的数据、工资总额、平均工资。
(6)退出程序。
*/
listemployeeemps;
intmain(intargc,charargv[])
{
voidprint(constemployee&e);
voidinput();
voiddel();
voidmod();
voidshow_all();
voidshow_name();
voidshow_dep();
printf("请选择操作:
1.录入2.删除3.修改4.查询5.显示所有员工6.退出:
");
intchoose=0;
scanf("%d",&choose);
assert(!
cin.fail());
while(choose!
=6)
{
if(choose==1)input();
if(choose==2)del();
if(choose==3)mod();
if(choose==4)
{
intchoice=0;
printf("请选择操作1.按姓名查询2.按部门查询3.退出:
");
scanf("%d",choice);
if(choice==1)show_name();
if(choice==2)show_dep();
if(choice==3)
{
printf("请选择操作:
1.录入2.删除3.修改4.查询5.显示所有员工6.退出:
");
scanf("%d",&choose);
assert(!
cin.fail());
continue;
}
}
if(choose==5)show_all();
printf("请选择操作:
1.录入2.删除3.修改4.查询5.显示所有员工6.退出:
");
scanf("%d",&choose);
assert(!
cin.fail());
}
return0;
}
voidprint(constemployee&e)
{
printf("编号:
");
printf("%s\n",e.m_num);
printf("姓名:
");
printf("%s\n",e.m_name);
printf("部门:
");
printf("%s\n",e.m_dep);
printf("保险:
");
printf("%f\n",e.m_insurance);
printf("税金:
");
printf("%f\n",e.m_tax);
printf("应付工资:
");
printf("%f\n",e.m_salary);
printf("实付工资:
");
printf("%f\n",e.m_salary-e.m_insurance-e.m_tax);
voidinput()
{
stringnum,name,dep;
doublesalary,ins,tax;
printf("请输入员工编号:
");
scanf("%s",&num);
printf("请输入员工姓名:
");
scanf("%s",&name);
printf("请输入员工部门:
");
scanf("%s",&dep);
printf("请输入员工保险");
scanf("%f",&ins);
assert(!
cin.fail());
printf("请输入员工税金");
scanf("%f",&tax);
assert(!
cin.fail());
printf("请输入员工应付工资:
");
scanf("%f",&salary);
assert(!
cin.fail());
employeetemp;
temp.m_dep=dep;
temp.m_insurance=ins;
temp.m_name=name;
temp.m_num=num;
temp.m_salary=salary;
temp.m_tax=tax;
emps.push_back(temp);
printf("员工录入操作完毕.");
}
voiddel()
{
if(emps.size()==0)
{
printf("没有员工记录.");
return;
}
charname;
boolisfind=false;
printf("请输入要删除的员工姓名:
");
scanf("%s",&name);
list:
:
iteratoriter;
for(iter=emps.begin();iter!
=emps.end();iter++)
{
if(iter->m_name==name)
{
isfind=true;
emps.erase(iter);
printf("姓名为");
printf("%s",name);
printf("的员工记录已删除");
return;
}
}
if(!
isfind)
{
printf("没有找到姓名为");
printf("%s",name)printf("的员工.");
return;
}
}
voidmod()
{
if(emps.size()==0)
{
printf("员工记录为空.");
return;
}
boolisfind=false;
stringname;
printf("请输入要修改的员工姓名:
");
scanf("%s",&name);
list:
:
iteratoriter;
for(iter=emps.begin();iter!
=emps.end();iter++)
{
if(iter->m_name==name)
{
isfind=true;
printf("姓名为");
printf("%s",name);
printf("的员工记录已找到.\n");
break;
}
}
if(isfind)
{
stringnum,name,dep;
doubletax,ins,salary;
print(*iter);
printf("请输入新的员工编号:
\n");
scanf("%s",&num);
printf("请输入新的员工姓名:
\n");
scanf("%s",&name);
printf("请输入新的员工部门:
\n");
scanf("%s",&dep);
printf("请输入新的员工保险:
:
\n");
scanf("%f",&ins);
assert(!
cin.fail());
printf("请输入新的员工税金:
\n");
scanf("%f",&tax);
assert(!
cin.fail());
printf("请输入新的员工工资:
\n");
scanf("%f",&salary);
assert(!
cin.fail());
iter->m_dep=dep;
iter->m_insurance=ins;
iter->m_name=name;
iter->m_num=num;
iter->m_salary=salary;
iter->m_tax=tax;
printf("1员工记录被成功修改.\n");
}
else
{
printf("没有找到姓名为");
printf("%s",name);
printf("的员工记录.\n");
}
voidshow_all()
{
if(emps.size()==0)
{
printf("员工记录为空.\n");
return;
}
printf("显示全体员工数据:
\n");
printf("--------------------"\n");
list:
:
iteratoriter;
for(iter=emps.begin();iter!
=emps.end();iter++)
{
printf("\n");
print(*iter);
printf("\n");
}
printf("--------------------"\n");
}
voidshow_name()
{
if(emps.size()==0)
{
printf("员工记录为空."\n");
return;
}
boolisfind=false;
stringname;
printf("请输入要查询的员工姓名:
"\n");
scanf("%s",&name);
list:
:
iteratoriter;
for(iter=emps.begin();iter!
=emps.end();iter++)
{
if(iter->m_name==name)
{
isfind=true;
printf("姓名为");
printf("%s",name);
printf("的员工记录已找到.\n");
print(*iter);
break;
}
}
if(!
isfind)
{
printf("没有找到姓名为");
printf("%s",name);
printf("的员工.\n");
return;
}
}
voidshow_dep()
{
if(emps.size()==0)
{
printf("没有找到姓名为\n")return;
}
doubleisfind=0.00;
doubletotal_salary=0.00;
stringdep;
printf("请输入要查询的部门名称:
\n");
scanf("%s",&dep);//cin>>dep;
printf("部门["<\n");
printf("--------------------\n");
list:
:
iteratoriter;
for(iter=emps.begin();iter!
=emps.end();iter++)
{
if(iter->m_dep==dep)
{
isfind++;
total_salary+=iter->m_salary;
print(*iter);
printf("\n");
continue;
}
}
printf("--------------------\n");if(isfind==0)
{
printf("没有找到名称为["<}
else
{
printf("部门["<\n");
printf("工资总额:
");
printf("%f\n",total_salary);
printf("平均工资:
");
printf("%f\n",total_salary/isfind);
}
}
四、结果分析
第1题:
程序运行结果如图1:
(可写包括对本题本程序的一些看法或总结)
图1程序运行结果1
第2题:
程序运行结果如图2:
图2程序运行结果2
第3题:
程序运行结果如图3:
图3程序运行结果3
五、参考文献
[1]马秀丽,刘志妩,李筠.C语言程序设计.北京:
清华大学出版社,2008
[2]谭浩强.C程序设计(第2版).北京:
清华大学出版社,2004
[3]袁志祥、秦锋主编数据结构(c语言版)例题详解与课程设计指导》第二版;中国科学技术大学出版社出版