C语言综合应用实例.docx
《C语言综合应用实例.docx》由会员分享,可在线阅读,更多相关《C语言综合应用实例.docx(35页珍藏版)》请在冰豆网上搜索。
![C语言综合应用实例.docx](https://file1.bdocx.com/fileroot1/2022-12/13/f9acd1fd-eef8-45ec-a248-78338937abc1/f9acd1fd-eef8-45ec-a248-78338937abc11.gif)
C语言综合应用实例
C语言综合应用实例
一、学生信息管理系统
*include/*I/O函数*/
*include/*其它说明*/
*include/*字符串函数*/
*defineBUFLEN100/*缓冲区最大字符数*/
*defineLEN15/***和最大字符数,实际请更改*/
*defineN100/*最大学生人数,实际请更改*/
structrecord/*构造体*/
{
charcode[LEN+1];/****/
charname[LEN+1];/**/
intage;/*年龄*/
charse*[3];/*性别*/
chartime[LEN+1];/*出生年月*/
charadd[30];/*家庭地址*/
chartel[LEN+1];/**/
charmail[30];/*电子地址*/
}stu[N];
intk=1,n,m;/*定义全局变量*/
voidreadfile();/*函数声明*/
voidseek();
voidmodify();
voidinsert();
voiddel();
voiddisplay();
voidsave();
voidmenu();
intmain()
{
while(k)
menu();
system("pause");
return0;
}
voidhelp()
{
printf("\n0.欢送使用系统帮助!
\n");
printf("\n1.进入系统后,先刷新学生信息,再查询;\n");
printf("\n2.按照菜单提示键入数字代号;\n");
printf("\n3.增加学生信息后,切记保存按7;\n");
printf("\n4.您的使用!
\n");
}
voidreadfile()/*建立信息*/
{
char*p="student.t*t";
FILE*fp;
inti=0;
if((fp=fopen("student.t*t","r"))==NULL)
{
printf("Openfile%serror!
Strikeanykeytoe*it!
",p);
system("pause");
e*it(0);
}
while(fscanf(fp,"%s%s%d%s%s%s%s%s",stu[i].code,stu[i].name,&stu[i].age,
stu[i].se*,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
{
i++;
i=i;
}
fclose(fp);
n=i;
printf("录入完毕!
\n");
}
voidseek()/*查找*/
{
inti,item,flag;
chars1[21];/*以和**最长长度+1为准*/
printf("------------------\n");
printf("-----1.按**查询-----\n");
printf("-----2.按查询-----\n");
printf("-----3.退出本菜单-----\n");
printf("------------------\n");
while
(1)
{
printf("请选择子菜单编号:
");
scanf("%d",&item);
flag=0;
switch(item)
{
case1:
printf("请输入要查询的学生的**:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].code,s1)==0)
{
flag=1;
printf("学生**学生年龄性别出生年月地址\n");
printf("--------------------------------------------------------------------\n");
printf("%6s%7s%6d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].se*,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
if(flag==0)
printf("该**不存在!
\n");break;
case2:
printf("请输入要查询的学生的:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].name,s1)==0)
{
flag=1;
printf("学生**学生年龄性别出生年月地址\n");
printf("--------------------------------------------------------------------\n");
printf("%6s%7s%6d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].se*,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
if(flag==0)
printf("该不存在!
\n");break;
case3:
return;
default:
printf("请在1-3之间选择\n");
}
}
}
voidmodify()/*修改信息*/
{
inti,item,num;
charse*1[3],s1[LEN+1],s2[LEN+1];/*以和**最长长度+1为准*/
printf("请输入要要修改的学生的**:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].code,s1)==0)/*比拟字符串是否相等*/
num=i;
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("------------------\n");
while
(1)
{
printf("请选择子菜单编号:
");
scanf("%d",&item);
switch(item)
{
case1:
printf("请输入新的:
\n");
scanf("%s",s2);
strcpy(stu[num].name,s2);break;
case2:
printf("请输入新的年龄:
\n");
scanf("%d",&stu[num].age);break;
case3:
printf("请输入新的性别:
\n");
scanf("%s",se*1);
strcpy(stu[num].se*,se*1);break;
case4:
printf("请输入新的出生年月:
\n");
scanf("%s",s2);
strcpy(stu[num].time,s2);break;
case5:
printf("请输入新的地址:
\n");
scanf("%s",s2);
strcpy(stu[num].add,s2);break;
case6:
printf("请输入新的:
\n");
scanf("%s",s2);
strcpy(stu[num].tel,s2);break;
case7:
printf("请输入新的地址:
\n");
scanf("%s",s2);
strcpy(stu[num].mail,s2);break;
case8:
return;
default:
printf("请在1-8之间选择\n");
}
}
}
voidsort()/*按**排序*/
{
inti,j,*p,*q,s;
chartemp[10];
for(i=0;i{
for(j=n-1;j>i;j--)
if(strcmp(stu[j-1].code,stu[j].code)>0)
{
strcpy(temp,stu[j-1].code);
strcpy(stu[j-1].code,stu[j].code);
strcpy(stu[j].code,temp);
strcpy(temp,stu[j-1].name);
strcpy(stu[j-1].name,stu[j].name);
strcpy(stu[j].name,temp);
strcpy(temp,stu[j-1].se*);
strcpy(stu[j-1].se*,stu[j].se*);
strcpy(stu[j].se*,temp);
strcpy(temp,stu[j-1].time);
strcpy(stu[j-1].time,stu[j].time);
strcpy(stu[j].time,temp);
strcpy(temp,stu[j-1].add);
strcpy(stu[j-1].add,stu[j].add);
strcpy(stu[j].add,temp);
strcpy(temp,stu[j-1].tel);
strcpy(stu[j-1].tel,stu[j].tel);
strcpy(stu[j].tel,temp);
strcpy(temp,stu[j-1].mail);
strcpy(stu[j-1].mail,stu[j].mail);
strcpy(stu[j].mail,temp);
p=&stu[j-1].age;
q=&stu[j].age;
s=*q;
*q=*p;
*p=s;
}
}
}
voidinsert()/*插入函数*/
{
inti=n,j,flag;
printf("请输入待增加的学生数:
\n");
scanf("%d",&m);
do
{
flag=1;
while(flag)
{
flag=0;
printf("请输入第%d个学生的**:
\n",i+1);
scanf("%s",stu[i].code);
for(j=0;j
if(strcmp(stu[i].code,stu[j].code)==0)
{
printf("已有该**,请检查后重新录入!
\n");
flag=1;
break;/*如有重复立即退出该层循环,提高判断速度*/
}
}
printf("请输入第%d个学生的:
\n",i+1);
scanf("%s",stu[i].name);
printf("请输入第%d个学生的年龄:
\n",i+1);
scanf("%d",&stu[i].age);
printf("请输入第%d个学生的性别:
\n",i+1);
scanf("%s",stu[i].se*);
printf("请输入第%d个学生的出生年月:
(格式:
年.月)\n",i+1);
scanf("%s",stu[i].time);
printf("请输入第%d个学生的地址:
\n",i+1);
scanf("%s",stu[i].add);
printf("请输入第%d个学生的:
\n",i+1);
scanf("%s",stu[i].tel);
printf("请输入第%d个学生的:
\n",i+1);
scanf("%s",stu[i].mail);
if(flag==0)
{
i=i;
i++;
}
}
while(in+=m;
printf("录入完毕!
\n\n");
sort();
}
voiddel()
{
inti,j,flag=0;
chars1[LEN+1];
printf("请输入要删除学生的**:
\n");
scanf("%s",s1);
for(i=0;iif(strcmp(stu[i].code,s1)==0)
{
flag=1;
for(j=i;jstu[j]=stu[j+1];
}
if(flag==0)
printf("该**不存在!
\n");
if(flag==1)
{
printf("删除成功,显示结果请选择菜单6\n");
n--;
}
}
voiddisplay()
{
inti;
printf("所有学生的信息为:
\n");
printf("学生**学生年龄性别出生年月地址\n");
printf("--------------------------------------------------------------------\n");
for(i=0;i{
printf("%6s%7s%5d%5s%9s%8s%10s%14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].se*,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
}
voidsave()
{
inti;
FILE*fp;
fp=fopen("student.t*t","w");/*写入*/
for(i=0;i{
fprintf(fp,"%s%s%d%s%s%s%s%s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].se*,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
fclose(fp);
}
voidmenu()/*界面*/
{
intnum;
printf("\n\n学生信息管理系统\n\n");
printf("*****************\n\n");
printf("*制作人:
*\n\n");
printf("*****************\n\n");
printf("*********************系统功能菜单************************\n");
printf("友情提醒:
查询前请先刷新系统!
\n");
printf("--------------------------------------------\n");
printf("*********************************************\n");
printf("*0.系统帮助及说明**1.刷新学生信息*\n");
printf("*********************************************\n");
printf("*2.查询学生信息**3.修改学生信息*\n");
printf("*********************************************\n");
printf("*4.增加学生信息**5.按**删除信息*\n");
printf("*********************************************\n");
printf("*6.显示当前信息**7.保存当前学生信息*\n");
printf("********************************************\n");
printf("*8.退出系统*\n");
printf("**********************\n");
printf("--------------------------------------------\n");
printf("请选择菜单编号:
");
scanf("%d",&num);
switch(num)
{
case0:
help();break;
case1:
readfile();break;
case2:
seek();break;
case3:
modify();break;
case4:
insert();break;
case5:
del();break;
case6:
display();break;
case7:
save();break;
case8:
k=0;break;
default:
printf("请在0-8之间选择\n");
}
}
二、学生成绩管理
编写一个菜单驱动的学生成绩管理程序。
要求如下:
▪能输入并显示n个学生的m门考试科目的成绩、总分和平均分。
▪按总分由高到低进展排序。
▪任意输入一个**,能显示该学生的、各门功课的成绩。
*include
*include
*include
*include
*defineSTU_NUM40/*最多的学生人数*/
*defineCOURSE_NUM10/*最多的考试科目*/
structstudent
{
intnumber;/*每个学生的***/
charname[10];/*每个学生的*/
intscore[COURSE_NUM];/*每个学生M门功课的成绩*/
intsum;/*每个学生的总成绩*/
floataverage;/*每个学生的平均成绩*/
};
typedefstructstudentSTU;
/*函数功能:
向链表的末尾添加从键盘输入学生的**、和成绩等信息
函数参数:
构造体指针head,指向存储学生信息的构造体数组的首地址
整型变量n,表示学生人数
整型变量m,表示考试科目
函数返回值:
无
*/
voidAppendScore(STU*head,intn,intm)
{
intj;
STU*p;
for(p=head;p
{
printf("\nInputnumber:
");
scanf("%d",&p->number);
printf("Inputname:
");
scanf("%s",p->name);
for(j=0;j{
printf("Inputscore%d:
",j+1);
scanf("%d",p->score+j);
}
}
}
/*函数功能:
打印n个学生的**、和成绩等信息
函数参数:
构造体指针head,指向存储学生信息的构造体数组的首地址
整型变量n,表示学生人数
整型变量m,表示考试科目
函数返回值:
无
*/
voidPrintScore(STU*head,intn,intm)
{
STU*p;
inti;
charstr[100]={'\0'},temp[3];
strcat(str,"NumberName");
for(i=1;i<=m;i++)
{
strcat(str,"Score");
itoa(i,temp,10);
strcat(str,temp);
strcat(str,"");
}
strcat(str,"sumaverage");
printf("%s",str);/*打印表头*/
for(p=head;p
{
printf("\nNo.%3d%8s",p->number,p->name);
for(i=0;i{
printf("%7d",p->score[i]);
}
printf("%11d%9.2f\n",p->sum,p->average);
}
}
/*函数功能:
计算每个学生的m门功课的总成绩和平均成绩
函数参数:
构造体指针head,指向存储学生信息的构造体数组的首地址
整型变量n,表示学生人数
整型变量m,表示考试科目
函数返回值:
无
*/
voidTotalScore(STU*head,intn,intm)
{
STU*p;
inti;
for(p=head;p
{
p->sum=0;
for(i=0;i{
p->sum=p->sum+p->score[i];
}
p->average=(float)p->sum/m;
}
}
/*函数功能:
用选择法按总成绩由高到低排序
函数参数:
构造体指针head,指向存储学生信息的构造体数组的首地址
整型变量n,表示学生人数
函数返回值:
无
*/
voidSortScore(STU*head,intn)
{
inti,j,k;
STUtemp;
for(i=0;i{
k=i;
for(j=i;j{
if((head+j)->sum>(head+k)->sum)
{
k=j;
}
}
if(k!
=i)
{
temp=*(head+k);
*(head+k)=*(head+i);
*(head+i)=temp;
}
}
}
/*函数功能:
查找学生的**
函数参数:
构造体指针head,指向存储学生信息的构造体数组的首地址
整型变量num,表示要查找的**
整型变量n,表示学生人数
函数返回值:
如果找到**,则返回它在构造体数组中的位置,否则返回-1
*/
intSearchNum(STU*head,intnum,intn)
{
inti;
for(i=0;i{
if((head+i)->number==