C语言课程设计.docx

上传人:b****1 文档编号:2523628 上传时间:2023-05-03 格式:DOCX 页数:15 大小:19.01KB
下载 相关 举报
C语言课程设计.docx_第1页
第1页 / 共15页
C语言课程设计.docx_第2页
第2页 / 共15页
C语言课程设计.docx_第3页
第3页 / 共15页
C语言课程设计.docx_第4页
第4页 / 共15页
C语言课程设计.docx_第5页
第5页 / 共15页
C语言课程设计.docx_第6页
第6页 / 共15页
C语言课程设计.docx_第7页
第7页 / 共15页
C语言课程设计.docx_第8页
第8页 / 共15页
C语言课程设计.docx_第9页
第9页 / 共15页
C语言课程设计.docx_第10页
第10页 / 共15页
C语言课程设计.docx_第11页
第11页 / 共15页
C语言课程设计.docx_第12页
第12页 / 共15页
C语言课程设计.docx_第13页
第13页 / 共15页
C语言课程设计.docx_第14页
第14页 / 共15页
C语言课程设计.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言课程设计.docx

《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(15页珍藏版)》请在冰点文库上搜索。

C语言课程设计.docx

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;}}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2