C语言综合应用实例_第1页
C语言综合应用实例_第2页
C语言综合应用实例_第3页
C语言综合应用实例_第4页
C语言综合应用实例_第5页
免费预览已结束,剩余22页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C 语言综合应用实例一、学生信息管理系统#include<>/*I/O 函数 */#include<>/*其它说明 */#include<>/*字符串函数*/#defineBUFLEN100/*缓冲区最大字符数*/#de巾neLEN15/*学号和姓名最大字符数,实际请更改*/#de巾neN100/*最大学生人数,实际请更改*/structrecord/* 结构体 */charcodeLEN+1;/* 学号 */charnameLEN+1;/* 姓名 */intage;/* 年龄*/charsex3;/* 性另卜/chartimeLEN+1;/* 出生年月*/

2、charadd30;/*家庭地址 */chartelLEN+1;/* 电话号码*/charmail30;/*电子邮件地址*/stuN;intk=1,n,m;/* 定义全局变量*/voidreadfile();/* 函数声明*/voidseek();voidmodify();voidinsert();voiddel();voiddisplay();voidsave();voidmenu();intmain()while(k)menu();system("pause");return0;voidhelp()printf("n0. 欢迎使用系统帮助!n");p

3、rintf("n1. 进入系统后,先刷新学生信息,再查询;n");printf("n2. 按照菜单提示键入数字代号;n");printf("n3. 增加学生信息后,切记保存按7;n");printf("n4. 谢谢您的使用!n");voidreadfile()/* 建立信息*/char*p=""FILE*fp;inti=0;if(fp=fopen("","r")=NULL)printf("Openfile%serror!Strikeanykeyt

4、oexit!",p);system("pause");exit(0);while(fscanf(fp,"%s%s%d%s%s%s%s%s",stui.code,,&stui.age, stui.sex,stui.time,stui.add,stui.tel,stui.mail)=8)i+;i=i;fclose(fp);n=i;printf(" 录入完毕!n");voidseek()/* 查找*/inti,item,flag;chars121;/*以姓名和学一号最+1 为准 */printf(&quo

5、t;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;i<n;i+)if

6、(strcmp(stui.code,s1)=0)flag=1;printf(" 学生学号学生姓名年龄性别出生年月地址电话E-mailn");printf("n");printf("%6s%7s%6d%5s%9s%8s%10s%14sn",stui.code,,stui.age, stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf(" 该学号不存在!n");break;case2:printf(" 请输入要查询的

7、学生的姓名:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(,s1)=0)flag=1;printf(" 学生学号学生姓名年龄性别出生年月地址电话E-mailn");printf("n");printf("%6s%7s%6d%5s%9s%8s%10s%14sn",stui.code,,stui.age, stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)pri

8、ntf(" 该姓名不存在!n");break;case3:return;default:printf(" 请在 1-3 之间选择n");voidmodify()/* 修改信息*/inti,item,num;charsex13,s1LEN+1,s2LEN+1;/* 以姓名和学号最长长度+1 为准 */printf(" 请输入要要修改的学生的学号:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0)/* 比较字符串是否相等*/num=i;prin

9、tf("n");printf("1. 修改姓名n");printf("2. 修改年龄n");printf("3. 修改性别n");printf("4. 修改出生年月n");printf("5. 修改地址n");printf("6. 修改电话号码n");printf("7. 修改 E-mail 地址 n");printf("8. 退出本菜单n");printf("n");while(1)printf

10、(" 请选择子菜单编号:");scanf("%d",&item);switch(item)case1:printf(" 请输入新的姓名:n");scanf("%s",s2);strcpy(,s2);break;case2:printf(" 请输入新的年龄:n");scanf("%d",&stunum.age);break;case3:printf(" 请输入新的性别:n");scanf("%s",s

11、ex1);strcpy(stunum.sex,sex1);break;case4:printf(" 请输入新的出生年月:n");scanf("%s",s2);strcpy(stunum.time,s2);break;case5:printf(" 请输入新的地址:n");scanf("%s",s2);strcpy(stunum.add,s2);break;case6:printf(" 请输入新的电话号码:n");scanf("%s",s2);strcpy(stunum.tel,

12、s2);break;case7:printf(" 请输入新的E-mail 地址 :n");scanf("%s",s2);strcpy(stunum.mail,s2);break;case8:return;default:printf(" 请在 1-8 之间选择n");voidsort()/*按学号排序*/inti,j,*p,*q,s;chartemp10;for(i=0;i<n-1;i+)for(j=n-1;j>i;j-)if(strcmp(stuj-1.code,stuj.code)>0)strcpy(temp,s

13、tuj-1.code);strcpy(stuj-1.code,stuj.code);strcpy(stuj.code,temp);strcpy(temp,);strcpy(,);strcpy(,temp);strcpy(temp,stuj-1.sex);strcpy(stuj-1.sex,stuj.sex);strcpy(stuj.sex,temp);strcpy(temp,stuj-1.time);strcpy(stuj-1.time,stuj.time);strcpy(stuj.time,temp);strcp

14、y(temp,stuj-1.add);strcpy(stuj-1.add,stuj.add);strcpy(stuj.add,temp);strcpy(temp,stuj-1.tel);strcpy(stuj-1.tel,stuj.tel);strcpy(stuj.tel,temp);strcpy(temp,stuj-1.mail);strcpy(stuj-1.mail,stuj.mail);strcpy(stuj.mail,temp);p=&stuj-1.age;q=&stuj.age;s=*q;*q=*p;*p=s;voidinsert()/* 插入函数 */inti=n,

15、j,flag;printf(" 请输入待增加的学生数:n");scanf("%d",&m);doflag=1;while(flag)flag=0;printf(" 请输入第%d 个学生的学号:n",i+1);scanf("%s",stui.code);for(j=0;j<i;j+)if(strcmp(stui.code,stuj.code)=0)printf(" 已有该学号,请检查后重新录入!n");flag=1;break;/*如有重复立即退出该层循环,提高判断速度*/print

16、f(" 请输入第%d 个学生的姓名:n",i+1);scanf("%s",);printf(" 请输入第%d 个学生的年龄:n",i+1);scanf("%d",&stui.age);printf(" 请输入第%d 个学生的性别:n",i+1);scanf("%s",stui.sex);printf(" 请输入第 %d 个学生的出生年月:(格式 :年 .月 )n",i+1);scanf("%s",stui.ti

17、me);printf(" 请输入第%d 个学生的地址:n",i+1);scanf("%s",stui.add);printf(" 请输入第%d 个学生的电话:n",i+1);scanf("%s",stui.tel);printf(" 请输入第%d 个学生的E-mail:n",i+1);scanf("%s",stui.mail);if(flag=0)i=i;i+;while(i<n+m);n+=m;printf(" 录入完毕!nn");sort();v

18、oiddel()inti,j,flag=0;chars1LEN+1;printf(" 请输入要删除学生的学号:n");scanf("%s",s1);for(i=0;i<n;i+)if(strcmp(stui.code,s1)=0)flag=1;for(j=i;j<n-1;j+)stuj=stuj+1;if(flag=0)printf(" 该学号不存在!n");if(flag=1)printf(" 删除成功,显示结果请选择菜单6n");n-;voiddisplay()inti;printf("

19、所有学生的信息为:n");printf(" 学生学号学生姓名年龄性别出生年月地址电话E-mailn");printf("n");for(i=0;i<n;i+)printf("%6s%7s%5d%5s%9s%8s%10s%14sn",stui.code,,stui.age, stui.sex,stui.time,stui.add,stui.tel,stui.mail);voidsave()inti;FILE*fp;fp=fopen("","w");/* 写入 */

20、for(i=0;i<n;i+)fprintf(fp,"%s%s%d%s%s%s%s%sn",stui.code,,stui.age, stui.sex,stui.time,stui.add,stui.tel,stui.mail);fclose(fp);voidmenu()/* 界面 */intnum;printf("nn 学生信息管理系统nn");printf("*nn");printf("* 制作人 :*nn");printf("nn");printf("I*

21、系统功能菜单*n");printf(" 友情提醒 :查询前请先刷新系统!n");printf("n");printf("I*n");printf("*0. 系统帮助及说明*1. 刷新学生信息*n");printf("I*n");printf("*2. 查询学生信息*3. 修改学生信息*n");printf("I*n");printf("*4. 增加学生信息*5. 按学号删除信息*n");printf("I*n&quo

22、t;);printf("*6. 显示当前信息*7. 保存当前学生信息*n");printf("I*n");printf("*8. 退出系统*n");printf("I*n");printf("n");printf(" 请选择菜单编号:");scanf("%d",&num);switch(num)case0:help();break;case1:readfile();break;case2:seek();break;case3:modify();br

23、eak;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<>#incl

24、ude<>#defineSTU_NUM40/*最多的学生人数*/#defineCOURSE_NUM 10/*最多的考试科目*/structstudentint number;/*每个学生的学号*/charname10; /*每个学生的姓名*/intscoreCOURSE_NUM;/*每个学生M 门功课的成绩*/intsum; /*每个学生的总成绩*/floataverage;/*每个学生的平均成绩*/;typedefstructstudentSTU;/*函数功能:向链表的末尾添加从键盘输入学生的学号、姓名和成绩等信息函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址

25、 整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/voidAppendScore(STU*head,intn,intm)int j;STU *p;for(p=head;p<head+n;p+)printf("nInputnumber:");scanf("%d",&p->number);printf("Inputname:");scanf("%s",p->name);for(j=0;j<m;j+)printf("Inputscore%d:",j+1

26、);scanf("%d",p->score+j);/* 函数功能:打印 n 个学生的学号、姓名和成绩等信息函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址 整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/voidPrintScore(STU*head,intn,intm)STU*p;inti;charstr100='0',temp3;strcat(str,"NumberName");for(i=1;i<=m;i+)strcat(str,"Score");itoa(i,te

27、mp,10);strcat(str,temp);strcat(str,"");strcat(str,"sumaverage");printf("%s",str);/*打印表头*/for(p=head;p<head+n;p+) /*打印 n 个学生的信息*/printf("nNo.%3d%8s",p->number,p->name);for(i=0;i<m;i+)printf("%7d",p->scorei);printf("%11d%n",p-&

28、gt;sum,p->average);/* 函数功能:计算每个学生的m 门功课的总成绩和平均成绩函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址 整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/voidTotalScore(STU*head,intn,intm)STU*p;inti;for(p=head;p<head+n;p+)p->sum=0;for(i=0;i<m;i+)p->sum=p->sum+p->scorei;p->average=(float)p->sum/m;/* 函数功能:用选择法按总成

29、绩由高到低排序函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址 整型变量n,表示学生人数函数返回值:无*/voidSortScore(STU*head,intn)inti,j,k;STUtemp;for(i=0;i<n-1;i+)k=i;for(j=i;j<n;j+)if(head+j)->sum>(head+k)->sum)k=j;if(k!=i)temp=*(head+k);*(head+k)=*(head+i);*(head+i)=temp;/* 函数功能:查找学生的学号函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址 整

30、型变量num,表示要查找的学号整型变量n,表示学生人数函数返回值:如果找到学号,则返回它在结构体数组中的位置,否则返回-1*/intSearchNum(STU*head,intnum,intn)inti;for(i=0;i<n;i+)if(head+i)->number=num) returni;return-1;/* 函数功能:按学号查找学生成绩并显示查找结果函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址 整型变量n,表示学生人数整型变量m,表示考试科目*/voidSearchScore(STU*head,intn,intm)intnumber,findNo;

31、printf("PleaseInputthenumberyouwanttosearch:");scanf("%d",&number);findNo=SearchNum(head,number,n);if(findNo=-1)printf("nNotfound!n");elsePrintScore(head+findNo,1,m);/* 函数功能:显示菜单并获得用户键盘输入的选项函数参数:无函数返回值:用户输入的选项*/charMenu(void)charch;printf("nManagementforStudent

32、s'scoresn");printf(" recordn");printf(" recordn");printf(" recordn");printf(" recordn");printf("n");printf("PleaseInputyourchoice:");scanf("%c",&ch);/*在c前面加一个空格,将存于缓冲区中的回车符读入*/returnch;main()charch;int m,n;STU stuSTU_

33、NUM;printf("Inputstudentnumberandcoursenumber(n<40,m<10):");scanf("%d,%d",&n,&m);while(1)ch=Menu();/*显示菜单,并读取用户输入*/switch(ch)case'1':AppendScore(stu,n,m);/调用成绩添加模块 */ TotalScore(stu,n,m);break;case'2':PrintScore(stu,n,m);/调用成绩显示模块 */break;case'3&

34、#39;:SearchScore(stu,n,m);姗用按学号查找模块 */ break;case'4':SortScore(stu,n);/调用成绩排序模块 */ printf("nSortedresultn");PrintScore(stu,n,m); /*显示成绩排序结果*/break;case'0':exit(0);/*退出程序 */printf("Endofprogram!");break;default:printf("Inputerror!"); break;学生成绩管理系统#includ

35、e""#include""#include""intshoudsave=0;/*/intpassword()charpassword10;intflag,i=1;doprintf("passwordn");scanf("%s",password);if(strcmp(password,"123")flag=0;i+;elseflag=1;break;while(i<=3);returnflag;structstudentcharnum10;/* 学号 */charnam

36、e20;charsex4;intcgrade;intmgrade;integrade;inttotle;intave;charneartime10;/*最近更新时间 */;typedefstructnodestructstudentdata;structnode*next;Node,*Link;voidmenu()printf("*");printf("t1登记学生资料ttttt2删除学生资料n");printf("t3查询学生资料ttttt4修改学生资料n");printf("t5保存学生资料ttttt6排序学生资料n&q

37、uot;);printf("t7统计学生资料ttttt8输出学生资料n");printf("t9 帮助信息ttttt0 退出系统n");printf("*n");voidprintstart()printf("n");voidWrong()printf("n=> 提示 :输入错误!n");voidNofind()printf("n=> 提示 :没有找到该学生!n");voidprintc()/* 本函数用于输出中文*/printf(" 学号 t 姓名性别

38、英语成绩数学成绩C 语言成绩总分平均分n");voidprinte(Node*p)/* 本函数用于输出英文*/printf("%-12s%st%st%dt%dt%dt%dt%dn",p->,p->,p->,p->,p->,p->,p->,p-> Node*Locate(Linkl,charfindmess,charnameornum)/* 该函数用于定位连表中符合要求的接点,并返回该指针*/Node*r;if(strcmp(nameornum,"num")=0)/* 按学号查询*/ r=l->

39、;next;while(r!=NULL)if(strcmp(r->,findmess)=0)returnr;r=r->next;elseif(strcmp(nameornum,"name")=0)/*按姓名查询 */r=l->next;while(r!=NULL)if(strcmp(r->,findmess)=0)returnr;r=r->next; return0;voidAdd(Linkl)/* 增加学生*/Node*p,*r,*s;charnum10;r=l;s=l->next;while(r->next!=NULL)r=r-

40、>next;/*将指针置于最末尾*/while(1)printf(" 请你输入学号(以 '0'返回上一级菜单:)");scanf("%s",num);if(strcmp(num,"0")=0)break;while(s)if(strcmp(s->,num)=0)printf("=>提示:学号为s'的学生已经存在,若要修改请你选择4修改'!n",num);printstart();printc();printe(s);printstart();printf("

41、;n");return;s=s->next;p=(Node*)malloc(sizeof(Node);strcpy(p->,num);printf(" 请你输入姓名:");scanf("%s",p->getchar();printf(" 请你输入性别:");scanf("%s",p->getchar();printf(" 请你输入c 语言成绩:");scanf("%d",&p->getchar();printf(" 请

42、你输入数学成绩:");scanf("%d",&p->getchar();printf(" 请你输入英语成绩:");scanf("%d",&p->getchar();p->=p->+p->+p->p->=p->3;/*信息输入已经完成*/p->next=NULL;r->next=p;r=p;shoudsave=1;voidQur(Linkl)/* 查询学生*/intsel;charfindmess20;Node*p;if(!l->next)pri

43、ntf("n=> 提示 :没有资料可以查询!n");return;printf("n=>1 按学号查找n=>2 按姓名查找n");scanf("%d",&sel);if(sel=1)/* 学号 */ printf(" 请你输入要查找的学号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p)printf("tttt 查找结果n");printstart();printc(

44、);printe(p);printstart();elseNofind();elseif(sel=2)/* 姓名 */printf(" 请你输入要查找的姓名:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p) printf("tttt 查找结果n");printstart();printc();printe(p);printstart(); elseNofind(); elseWrong();voidDel(Linkl)/* 删除 */intsel;N

45、ode*p,*r;charfindmess20;if(!l->next)printf("n=> 提示 :没有资料可以删除!n");return;printf("n=>1 按学号删除n=>2 按姓名删除n");scanf("%d",&sel);if(sel=1)printf(" 请你输入要删除的学号:");scanf("%s",findmess);p=Locate(l,findmess,"num");if(p)r=l;while(r->ne

46、xt!=p)r=r->next;r->next=p->next;free(p);printf("n=> 提示 :该学生已经成功删除!n");shoudsave=1;elseNofind();elseif(sel=2)printf(" 请你输入要删除的姓名:");scanf("%s",findmess);p=Locate(l,findmess,"name");if(p)r=l;while(r->next!=p)r=r->next;r->next=p->next;free

47、(p);printf("n=> 提示 :该学生已经成功删除!n");shoudsave=1;elseNofind();elseWrong();voidModify(Linkl)/* 本函数用于修改资料*/Node*p;charfindmess20;if(!l->next)printf("n=> 提示 :没有资料可以修改!n");return;printf(" 请你输入要修改的学生学号:");scanf("%s",findmess);p=Locate(l,findmess,"num&quo

48、t;);if(p)printf(" 请你输入新学号(原来是%s):",p->scanf("%s",p->printf(" 请你输入新姓名(原来是%s):",p->scanf("%s",p->getchar();printf(" 请你输入新性别(原来是%s):",p->scanf("%s",p->printf(" 请你输入新的c 语言成绩(原来是%d 分 ):",p->scanf("%d",&am

49、p;p->getchar();printf(" 请你输入新的数学成绩(原来是 %d 分 ):",p->scanf("%d",&p->getchar();printf(" 请你输入新的英语成绩(原来是 %d 分 ):",p->scanf("%d",&p->p->=p->+p->+p->p->=p->3;printf("n=> 提示 :资料修改成功!n");shoudsave=1;elseNofind();voi

50、dDisp(Linkl)/* 本函数用于显示资料*/intcount=0;Node*p;p=l->next;if(!p)printf("n=> 提示:没有资料可以显示!n");return;printf("tttt 显示结果n");printstart();printc();printf("n");while(p)printe(p);p=p->next;printstart();printf("n");voidTongji(Linkl)/* 本函数用于统计分数*/Node*pm,*pe,*pc,*

51、pt,*pa;/* 用于指向分数最高的接点*/Node*r=l->next;if(!r)printf("n=> 提示:没有资料可以统计!n");return;pm=pe=pc=pt=pa=r;while(r!=NULL)if(r->>=pc->pc=r;if(r->>=pm->pm=r;if(r->>=pe->pe=r;if(r->>=pt->pt=r;if(r->>=pa->pa=r;r=r->next;printf(" 统计结果n");prin

52、tf(" 总分最高者:t%s%d 分n",pt->,pt->printf(" 平均分最高者:t%s%d 分 n",pa->,pa->printf(" 英语最高者:t%s%d 分n",pe->,pe->printf(" 数学最高者:t%s%d 分n",pm->,pm->printf("c 语言最高者:t%s%d 分 n",pc->,pc->printstart();voidSort(Linkl)Linkll;Node*p,*rr,*s;l

53、l=(Link)malloc(sizeof(Node);/* 用于做新的连表*/ll->next=NULL;if(l->next=NULL)printf("n=> 提示 :没有资料可以排序!n");return;p=l->next;while(p)s=(Node*)malloc(sizeof(Node);/* 新建接点用于保存信息*/s->data=p->data;s->next=NULL;rr=ll;while(rr->next!=NULL&&rr->next->>=p->rr=rr->next;if(rr->next=NULL)rr->next=s;elses->next=r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论