C语言课程设计.docx
- 文档编号:11967037
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:15
- 大小:19.01KB
C语言课程设计.docx
《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(15页珍藏版)》请在冰豆网上搜索。
C语言课程设计
C语言课程设计
链表操作设计
链表节点数据为:
学号:
charnum[10]
语文:
intchi
数学:
intmath
总分:
intsum
链表设计题:
l定义相应的数据结构,设计一个简单的菜单;
l创建两个已排序的链表;
l输出两个链表;
l按序合并两个链表并输出;
l合并链表保存到文件中;
2)数据库管理系统设计
题目:
工资管理管理系统
从文件读取数据,提供新增、删除、修改和显示等功能,并将修改后的数据写入一个新的文件。
工资单如下:
工号:
long4bytes
姓名:
char20bytes
基本工资:
float4bytes
津贴:
float4bytes
扣税:
float4bytes
实发工资:
float4bytes
系统功能模块如下:
(1)建立工资表(单独一个执行文件创建数据库);
(2)将工资表读入到一个结构体数组中,并计算;
(3)菜单实现以下功能:
①计算每个职工的扣税;基本工资+津贴的值:
小于1500元,扣税为0;小于2000元,扣税为(基本工资+津贴-1500)*5%;大于2000元的,扣税为(基本工资+津贴-1500)*5%+(基本工资+津贴-2000)*10%
②计算职工的实发工资;
③显示各职工工资信息;
④新增一个职工工资信息;
⑤修改一个职工工资信息;(按工号)
⑥查询职工工资信息(按工号)。
(4)修改后的工资表写入到另一个新文件中。
链表题源代码:
#include
#include
#include
#include
#defineNULL0
#defineZgotoX;
#defineZ1gotoN;
intR=0,g=0;
structstudent
{charname[10];
intChi;
intMath;
intsum;
structstudent*next;
};
structstudent*ss;
structstudent*build(void)
{structstudent*h,*p,*p1;charx[]="0",y[]="-1";
intn=0;
inti=0,o[100];i=n+1;
printf("\t*输入错误时,重输请按‘0’;输入完毕按‘-1’确定*\n");
p=p1=(structstudent*)malloc(sizeof(structstudent));
X:
printf("\t请输入第1个学号,注意每个学号的长度要一样长!
\n");
scanf("%s",p->name);
if(R==1){
if(strlen(p->name)!
=g)
{printf("\t\t-----学号长度与第一次不同,请重输----\n\n");Z}}
o[0]=0;o=strlen(p->name);
if(strcmp(x,p->name)==0)Z
printf("\t**请输入语文成绩\n");
scanf("%d",&p->Chi);if(p->Chi==0)Z
printf("\t**请输入数学成绩\n");
scanf("%d",&p->Math);if(p->Math==0)Z
p->sum=p->Chi+p->Math;
h=NULL;
R++;
while
(1)
{n=n+1;i=n+1;
if(n==1)h=p;
elsep1->next=p;
p1=p;
p=(structstudent*)malloc(sizeof(structstudent));
N:
printf("\t请输入第%d个学号,输入完毕按‘-1’\n",i);
scanf("%s",p->name);o=strlen(p->name);
if(strcmp(y,p->name)==0)break;if(strcmp(x,p->name)==0)Z1
if(o!
=o)
{printf("\t***输入的学号长度有误,请重输***\n");Z1}
if(strcmp(p1->name,p->name)>0)
{printf("\t\t……你输入的学号有误,学号按升序输入!
……\n");Z1}
printf("\t**请输入语文\n");
scanf("%d",&p->Chi);if(p->Chi==0)Z1
printf("\t**请输入数学成绩\n");scanf("%d",&p->Math);if(p->Math==0)Z1
p->sum=p->Chi+p->Math;
}
p1->next=NULL;
return(h);
}
structstudent*c(structstudent*head,structstudent*p2)
{structstudent*h11,*h12,*h2,*p1;
p1=head;
while(p2!
=NULL)
{h2=p2;p2=p2->next;
h12=p1;
while(strcmp(h2->name,h12->name)>0&&(h12->next!
=NULL))
{h11=h12;h12=h12->next;}
if(strcmp(h2->name,h12->name)<0)
{if(head==h12){head=h2;p1=head;}
else
h11->next=h2;
h2->next=h12;}
else{h12->next=h2;h2->next=NULL;}
}
printf("\t\t\n*两个链表已按学号从小到大排序*\n");
return(head);}
voidprint(structstudent*head)
{structstudent*p=head;
if(head!
=NULL){printf("\n\t学号语文数学总分\n");
do{
printf("\t%s%5d%5d%5d\n",p->name,p->Chi,p->Math,p->sum);
p=p->next;}while(p!
=NULL);}}
voidsave(structstudent*e)
{charm[]="学号语文数学总分";
FILE*p;
p=fopen("d:
\\链表.txt","w");fprintf(p,"%s\n",m);
while(e!
=NULL)
{fprintf(p,"%s%5d%5d%5d\n",e->name,e->Chi,e->Math,e->sum);e=e->next;}
fclose(p);
printf("\t\t数据已保存在d盘链表.txt文件中\n");
printf("\n\t\t**程序运行结束!
**\n");
}
voidmain()
{intm;structstudent*s1,*s2,*head;
A:
do{printf("\t\t\t欢迎进入学生信息链表管理系统\n\n");
printf("\t\t\t……1.创建两个链表\n\t\t\t……2.合并输入的两个链表\n\t\t\t……3.确认完成操作\n\t\t\t……0.退出程序\n");
printf("\t\t***注意请先创建两个链表后再执行合并任务***\n");
if(m==0)exit(0);
printf("\t\t\t---请输入要操作的序号---\n");
scanf("%d",&m);
if(m==3)gotoB;ss=s1;
if(m==1)
{printf("\t\t注意:
学号按从小到大输入\n");
printf("\t\t……请输入第一个链表数据……\n\n");
s1=build();printf("\t第一个链表为\n");g=strlen(s1->name);
print(s1);
printf("\t\t……请输入第二个链表数据……\n\n");
s2=build();printf("\t第二个链表为\n");print(s2);}
if(m==2){head=c(s1,s2);print(head);}
if(m!
=1&&m!
=2&&m!
=0)printf("\t\t\t*****输入错误*****\n");
if(m==1||m==2)
printf("\t---若继续操作请继续选择相应的序号---\n");
}while(m!
=0);
B:
if(m!
=0){printf("是否保存到文件?
1,保存;2,取消并退出。
\n\n");
scanf("%d",&m);if(m==1)save(head);if(m==2)exit(0);
if(m!
=1&&m!
=2)
{printf("您输入有误,是否继续操作:
\n\t1.重新创建\n\t2.重复本次操作.其它任意数字退出程序\n\n");
scanf("%d",&m);if(m==1)gotoA;if(m==2)gotoB;}}}
数据库管理题代码:
1.创建职工数据代码:
#include"stdio.h"
#include"string.h"
#defineXgotoE;
structT
{longintnum;
charname[20];
floatjt;
floatjb;
floatks;
floatsf;
};
structTs[100];
voidmain()
{inti=0,c;chard[]="-1";
FILE*fp;
fp=fopen("d:
\\x.txt","w");printf("\t\t\t★欢迎使用职工信息输入系统★\n\n");
printf("\t\t请分别输入员工的工号姓名基本工资津贴\n\n\t\t\t请分别输入正确类型的数据\n");
printf("\t\t输入完毕后,以‘0’为终止,重新输入此工号信息请输入‘-1’\n\n");
for(i=0;;i++)
{c=i+1;
E:
printf("\t\t请依次输入第%d个员工的工号、姓名、基本工资、津贴\n",c);
scanf("%ld",&s.num);if(s.num==0)break;if(s.num==-1)X
scanf("%s",s.name);if(strcmp(d,s.name)==0)Xscanf("%f",&s.jb);if(s.jb==-1)X
scanf("%f",&s.jt);if(s.jt==-1)X
fprintf(fp,"%ld%s%f%f\n",s.num,s.name,s.jb,s.jt);
}
fclose(fp);
printf("\t\t数据已保存在d盘下\n");
}
2.职工数据库管理源代码:
#include"stdio.h"
#include"string.h"
#include"math.h"
#include"stdlib.h"
inti=0;
structGZ
{longintnum;
charname[20];
floatjb;
floatjt;
floatks;
floatsf;
};
structGZs[100];
voidRead()
{FILE*fp;
floatM;structGZs1;
fp=fopen("d:
\\x.txt","r");
if(fp==NULL)
{printf("\t\t\t~~~~文件不存在请先建立后再执行本程序~~~~~\n");exit(0);}
while(fscanf(fp,"%ld%s%f%f\n",&s1.num,s1.name,&s1.jb,&s1.jt)!
=EOF)
{s.num=s1.num;s.jb=s1.jb;s.jt=s1.jt;strcpy(s.name,s1.name);
M=s.jb+s.jt;
if(M<=1500)s.ks=0;elseif(M<=2000)s.ks=(M-1500)/20;
elses.ks=(M-1500)/20+(M-2000)/10;
s.sf=M-s.ks;
i++;}
fclose(fp);
printf("\t\t\t***文件读取成功***\n");
printf("\t\t******************************************\n");
}
voidDisp()
{intc;
printf("\t\t\t工号姓名基本工资津贴扣税实发工资\n");
for(c=0;c
printf("\t\t\t%ld%8s%7.3f%7.3f%7.3f%7.3f\n\n",s[c].num,s[c].name,s[c].jb,s[c].jt,s[c].ks,s[c].sf);
}
voidAppend()
{charb[]="0";floatM;inta,k1;
X:
printf("\t\t…您正进入职工信息增加系统,1.退出;按其它任意数字键继续…\n");scanf("%d",&k1);
if(k1==1)gotoLLL;
printf("\t\t请输入要增加职工的工号\n");
scanf("%ld",&s.num);if(s.num==0)gotoX;
printf("\t\t请输入职工的名字\n");
scanf("%s",s.name);
if(strcmp(b,s.name)==0)gotoX;
printf("\t\t请输入此职工的基本工资\n");
scanf("%f",&s.jb);if(s.jb<0.000001)gotoX;
printf("\t\t请输入此职工的津贴\n");
scanf("%f",&s.jt);if(s.jt<0.000001)gotoX;
M=s.jb+s.jt;
if(M<=1500)s.ks=0;
elseif(M<=2000)s.ks=(M-1500)/20;
elses.ks=(M-1500)/20+(M-2000)/10;
s.sf=M-s.ks;
printf("\t该职工:
\n\t\t职工名字基本工资津贴扣税实发工资\n\t\t%ld%8s%6.3f%6.3f%6.3f%6.3f\n",s.num,s.name,s.jb,s.jt,s.ks,s.sf);
i++;
do{printf("\t\t\t是否再新增一个职工工资信息?
\n\t\t1.是2.否");
scanf("%d",&a);
if(a==1)gotoX;elseif(a==2)break;elseprintf("\t\t您输入有误,请重新选择\n");}while
(1);
LLL:
;
}
voidModify()
{intk,k1,k2,p=0;floatM;
charb[]="0",c[]="00";
W:
printf("\t\t*请输入要修改的职工工号,重输请按“0”,退出请按“-1”*\n\n");
scanf("%ld",&k);
if(k==0)gotoW;if(k==-1)gotoL;
for(k1=0;k1
if(p==0){printf("\t\t\t----此职工工号不存在,请重输!
----\n");
gotoW;}
p=0;
printf("\t\t-请输入此职工新的姓名\n");
scanf("%s",s[k2].name);
if(strcmp(s[k2].name,b)==0)gotoW;
printf("\t\t-请输入此职工新的基本工资\n");
scanf("%f",&s[k2].jb);if(s[k2].jb<0.0000001)gotoW;
printf("\t\t-请输入此职工新的津贴\n");
scanf("%f",&s[k2].jt);if(s[k2].jt<0.0000001)gotoW;
M=s[k2].jb+s[k2].jt;
if(M<=1500)s[k2].ks=0;elseif(M<=2000)s[k2].ks=(M-1500)/20;
elses[k2].ks=(M-1500)/20+(M-2000)/10;
s[k2].sf=M-s[k2].ks;
printf("职工工号%ld修改后为:
\n\t\t名字:
%s基本工资:
%6.3f津贴:
%6.3f扣税:
%6.3f实发工资:
%6.3f\n",s[k2].num,s[k2].name,s[k2].jb,s[k2].jt,s[k2].ks,s[k2].sf);
O:
printf("\t\t请确认是否修改正确:
1.确认并执行其它任务;2.重新查找修改\n");
scanf("%d",&k1);
if(k1==1)printf("\t\t修改成功,请注意保存数据!
\n");
else
if(k1==2)gotoW;
else{printf("\t\t无此选项请重新执行本次操作!
\n");gotoO;}
L:
;
}
voidQuery()
{intk,number,flag=0,k1;
U:
printf("\t\t**进入查询系统,是否继续?
**2.no;按其它任意数字键继续。
\n");scanf("%d",&k1);if(k1==2)gotoLL;
printf("-请输入要查询职工工号\n");
scanf("%d",&number);
for(k=0;k
if(number==s[k].num){flag=1;
printf("要查询的职工信息为:
\n姓名:
%s基本工资:
%8.3f津贴:
%8.3f扣税:
%8.3f实发工资:
%8.3f\n",s[k].name,s[k].jb,s[k].jt,s[k].ks,s[k].sf);
break;}
if(flag==0){printf("\t\t……您输入的学号无法找到,是否重新查找?
\n");
do{printf("\t\t\t1.重新查找;2.否。
\n");scanf("%d",&number);
if(number==1)gotoU;elseif(number==2)break;
elseprintf("\t\t\t--输入有误,请重新选择\n");}while
(1);
}
else{do{printf("\t\t■是否继续查找?
1.继续。
2.否。
\n");scanf("%d",&number);if(number==1)gotoU;
elseif(number==2)break;
elseprintf("\t\t\t--输入有误,请重新选择\n");}while
(1);}
LL:
;
}
voidSave()
{intc;charsen[50]="学号姓名语文数学总分名次\n";
FILE*fp1;
fp1=fopen("d:
\\y.txt","w");fprintf(fp1,"%s",sen);
for(c=0;c
fprintf(fp1,"%ld%s%6.3f%6.3f%6.3f%6.3f\n",s[c].num,s[c].name,s[c].jb,s[c].jt,s[c].ks,s[c].sf);
fclose(fp1);printf("\t\t******文件已保存至d盘下*******\n");printf("\t\t************************************\n");}
voidmain()
{intch,ff=0,xx=0;printf("\t\t******欢迎进入职工信息管理系统******\n\n");
do{
LL:
if(xx==0)
printf("\t\t\t¨请先读取文件Readafile?
¨\n
\t\t\t\t1.yes2.no\n");elseprintf("\t\t\t◇是否继续操作?
◇\n\t\t\t1.noandexit;2.yes\n");
scanf("%d",&ch);if(ch==1&&xx!
=0)exit(0);
if(ch==2)break;elseif(ch==1){Read();ff=1;}
else{printf("\t\t您输入有误,请重输!
\n");gotoLL;}
xx++;}while
(1);
if(ff==1)
{me:
printf("\t\t\t§请输入要操作的序号:
§\n");
printf("\t\t\t●1.显示所有职工的信息\n");
printf("\t\t\t●2.新增职工的信息\n");
printf("\t\t\t●3.修改职工的基本信息\n");
printf("\t\t\t●4.查询职工的信息\n");
printf("\t\t\t●0.退出管理系统\n\n");
printf("\t\t\t‖请选择(0~4)间的序号操作‖");
scanf("%d",&ch);
switch(ch)
{case1:
Disp();break;
case2:
Append();break;
case3:
Query();break;
case4:
Modify();break;
case0:
WW:
{printf("\t\t※是否保存?
※1.是2.否并退出3.重新选择操作\n");scanf("%d",&ch);if(ch==2)exit(0);
elseif(ch==1){Save();printf("\t\t★是否继续其它操作?
1.是2.否\n");scanf("%d",&ch);
if(ch==2)exit(0);elsegotome;}
elseif(ch==3)gotome;
else{printf("\t\t\t→无此选择,请重选!
←\n");gotoWW;}}}
if(ch<0||ch>4)printf("\n\n\n\t\tpleasechooseagain!
\n\n");
gotome;}}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计