


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C 语言综合应用实例一、学生信息管理系统 #include /*I/O 函数 */ #include /* 其它说明 */ #include /* 字符串函数 */#define BUFLEN 100 /* 缓冲区最大字符数 */ #define LEN 15 /* 学号和最大字符数 ,实际请更改 */ #define N 100 /* 最大学生人数 ,实际请更改 */ struct record /*结构体 */char codeLEN+1; /* 学号 */ char nameLEN+1; /* */ int age; /* 年龄 */ char sex3; /* 性别 */ char t
2、imeLEN+1; /* 出生年月 */ char add30; /* 家庭地址 */ char telLEN+1; /* */ char mail30; /* 电子地址 */ stuN;int k=1,n,m; /* 定义全局变量 */ void readfile();/* 函数声明 */ void seek();void modify();void insert();void del();void display();void save();void menu();int main()while(k) menu(); system(pause);return 0;void help() p
3、rintf(n0. 欢迎使用系统帮助! n);printf(n1.进入系统后,先刷新学生信息,再查询;n); printf(n2. 按照菜单提示键入数字代号 ;n); printf(n3. 增加学生信息后 ,切记保存按 7;n);printf(n4. 谢谢您的使用! n);void readfile()/* 建立信息 */char *p=student.txt;FILE *fp;int i=0;if (fp=fopen(student.txt,r)=NULL)printf(Open file %s error! Strike any key to exit!,p); system(pause)
4、;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);void seek() /*查找 */int i,item,flag;char s121; /* 以和学号最长长度 +1 为准 */printf(n);printf( 1. 按学号查询 n); printf(2. 按查询 n);printf( 3. 退出本菜单 n)
5、; printf(n);while(1)printf( 请选择子菜单编号 :);scanf(%d,&item);flag=0; switch(item)case 1:printf( 请输入要查询的学生的学号 :n); scanf(%s,s1);for(i=0;in;i+)if(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,
6、 stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf( 该学号不存在! n); break;case 2:printf( 请输入要查询的学生的 :n); scanf(%s,s1);for(i=0;in;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,
7、stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf( 该不存在! n); break;case 3:return;default:printf( 请在 1-3 之间选择 n);void modify() /* 修改信息 */int i,item,num;char sex13,s1LEN+1,s2LEN+1; /* 以和学号最长长度 +1 为准 */ printf( 请输入要要修改的学生的学号 :n);scanf(%s,s1); for(i=0;in;i+) if(strcmp(stui.code,s1)=0) /*
8、比较字符串是否相等 */ num=i;printf(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( 请选择子菜单编号 :); scanf(%d,&item);switch(item)case 1:printf( 请输入新的 :n); scanf(%s,s2);strcpy(stunum.n
9、ame,s2); break; case 2:printf( 请输入新的年龄 :n); scanf(%d,&stunum.age);break; case 3:printf( 请输入新的性别 :n); scanf(%s,sex1);strcpy(stunum.sex,sex1); break; case 4:printf( 请输入新的出生年月 :n); scanf(%s,s2);strcpy(stunum.time,s2); break; case 5:printf( 请输入新的地址 :n); scanf(%s,s2);strcpy(stunum.add,s2); break; case 6:
10、printf( 请输入新的 :n); scanf(%s,s2);strcpy(stunum.tel,s2); break;case 7:printf(请输入新的E-mail地址:n);scanf(%s,s2);strcpy(stunum.mail,s2); break;case 8:return;default:printf( 请在 1-8 之间选择 n);void sort()/* 按学号排序 */int i,j,*p,*q,s;char temp10; for(i=0;ii;j-) if(strcmp(stuj-1.code,stuj.code)0) strcpy(temp,stuj-1.
11、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);
12、 strcpy(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;void insert() /*插入函数
13、*/int i=n,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;ji;j+)if(strcmp(stui.code,stuj.code)=0)printf( 已有该学号 ,请检查后重新录入 !n);flag=1;break; /*如有重复立即退出该层循环 ,提高判断速度 */printf( 请输入第 %d 个学生的 :n,i+1); scanf(%s,);printf(
14、 请输入第 %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.time);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.
15、mail);if(flag=0)i=i;i+;while(in+m);n+=m;printf( 录入完毕! nn);sort();void del()int i,j,flag=0;char s1LEN+1;printf( 请输入要删除学生的学号 :n);scanf(%s,s1);for(i=0;in;i+)if(strcmp(stui.code,s1)=0)flag=1;for(j=i;jn-1;j+)stuj=stuj+1;if(flag=0)printf( 该学号不存在! n);if(flag=1)printf( 删除成功 ,显示结果请选择菜单 6n);n-;void display()i
16、nt i;printf( 所有学生的信息为 :n);printf( 学生学号 学生 年龄 性别 出生年月 地址 E-mailn);printf(n);for(i=0;in;i+)printf(%6s %7s %5d %5s %9s %8s %10s %14sn,stui.code,,stui.age, stui.sex,stui.time,stui.add,stui.tel,stui.mail);void save()int i;FILE *fp;fp=fopen(student.txt,w); /* 写入 */for(i=0;in;i+)fprintf(fp,%s %s %
17、d %s %s %s %s %sn,stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);fclose(fp);void menu()/* 界面 */int num;printf( nn 学生信息管理系统 nn);printf(printf(* 制作人 :printf(*printf(f*系统功能菜单nn);n n);nn);*n);printf( 友情提醒 :查询前请先刷新系统!n);printf(n);printf(printf(* 0.系统帮助及说明* *1.刷新学生信息n);n);pri
18、ntf( printf( printf( printf( printf( printf( printf( printf( printf( printf(* 2.查询学生信息 * *3.修改学生信息* 4.增加学生信息 * *5.按学号删除信息* 6. 显示当前信息 * *7.保存当前学生信息* * 8. 退出系统*n);n);n);n);n);n);n);n);n);n);printf( 请选择菜单编号 :); scanf(%d,&num);switch(num)case 0:help();break;case 1:readfile();break;case 2:seek();break;ca
19、se 3:modify();break;case 4:insert();break;case 5:del();break;case 6:display();break;case 7:save();break;case 8:k=0;break;default:printf( 请在 0-8 之间选择 n); 、学生成绩管理编写一个菜单驱动的学生成绩管理程序。要求如下:? 能输入并显示 n 个学生的 m 门考试科目的成绩、总分和平均分 ? 按总分由高到低进行排序。? 任意输入一个学号,能显示该学生的、各门功课的成绩 #include #include #include #include /* 最多的
20、学生人数 */* 最多的考试科目 */#define STU_NUM 40#define COURSE_NUM 10struct studentint number;charname10;int scoreCOURSE_NUM;int sum;float average;typedef struct student STU;/* 每个学生的学号 */* 每个学生的 */* 每个学生 M 门功课的成绩 */* 每个学生的总成绩 */* 每个学生的平均成绩 */* 函数功能: 向链表的末尾添加从键盘输入学生的学号、和成绩等信息 函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址 整
21、型变量n,表示学生人数 整型变量m,表示考试科目函数返回值: 无*/void AppendScore(STU *head, int n, int m)int j;STU *p;for (p=head; pnumber); printf(Input name:);scanf(%s, p-name);for (j=0; jscore+j);/* 函数功能: 打印 n 个学生的学号、和成绩等信息函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址 整型变量n,表示学生人数 整型变量m,表示考试科目函数返回值: 无*/void PrintScore(STU *head, int n, i
22、nt m)STU *p;int i;char str100 = 0, temp3;strcat(str, Number Name );for (i=1; i=m; i+)strcat(str, Score);itoa(i,temp, 10);strcat(str, temp);strcat(str, );strcat(str, sum average);printf(%s, str);/* 打印表头 */for (p=head; pnumber, p-name);for (i=0; iscorei);printf(%11d%9.2fn, p-sum, p-average);/* 函数功能: 计
23、算每个学生的 m 门功课的总成绩和平均成绩函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址 整型变量n,表示学生人数 整型变量m,表示考试科目函数返回值: 无*/void TotalScore(STU *head, int n, int m)STU *p;int i;for (p=head; psum = 0; for (i=0; isum = p-sum + p-scorei; p-average = (float)p-sum / m;/* 函数功能: 用选择法按总成绩由高到低排序函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址 整型变量n,表示学生人数函
24、数返回值: 无*/void SortScore(STU *head, int n)int i, j, k;STU temp;for (i=0; in-1; i+)k = i;for (j=i; jsum (head+k)-sum) k = j;if (k != i)temp = *(head+k); *(head+k) = *(head+i); *(head+i) = temp;/* 函数功能:查找学生的学号函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址 整型变量num,表示要杳找的学号整型变量n,表示学生人数函数返回值: 如果找到学号,则返回它在结构体数组中的位置,否则返
25、回 -1*/int SearchNum(STU *head, int num, int n)int i;for (i=0; inumber = num) return i;return -1;/* 函数功能: 按学号查找学生成绩并显示查找结果函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值: 无*/void SearchScore(STU *head, int n, int m)int number, findNo;printf(Please Input the number you want to search:);
26、scanf(%d, &number);findNo = SearchNum(head, number, n);if (findNo = -1)printf(nNot found!n);elsePrintScore(head+findNo, 1, m);/* 函数功能: 显示菜单并获得用户键盘输入的选项函数参数: 无函数返回值: 用户输入的选项*/char Menu(void)char ch;printf(nManagement for Students scoresn);printf( 1.Appendrecordn);printf( 2.Listrecordn);printf( 3.Sear
27、chrecordn);printf( 4.Sortrecordn);printf( 0.Exitn);printf(Please Input your choice:);seanf(” c, &ch); /*在c前面加一个空格,将存于缓冲区中的回车符读入*/return ch;main()charch;int m, n;STUstuSTU_NUM;printf(Input student number and course number(n40,m10):);scanf(%d,%d, &n, &m);while (1)ch = Menu();/* 显示菜单,并读取用户输入 */switch (
28、ch)case1:AppendScore(stu, n, m);/* 调用成绩添加模块 */ TotalScore(stu, n, m); break;case2:PrintScore(stu, n, m); /* 调用成绩显示模块 */ break;case3:SearehScore(stu, n, m);/* 调用按学号查找模块 */ break;case4:SortScore(stu, n);/* 调用成绩排序模块 */printf(nSorted resultn); PrintScore(stu, n, m); /* 显示成绩排序结果 */ break;case0:exit(0);/*
29、 退出程序 */printf(End of program!); break;default:printf(Input error!); break;学生成绩管理系统#include stdio.h#include stdlib.h#include string.hint shoudsave=0; /* */int password()char password10;int flag,i=1;do printf(password?n);scanf(%s,password);if(strcmp(password,123) flag=0;i+;else flag=1;break;while(i 提
30、示:输入错误 !n);void Nofind() printf(n= 提示 :没有找到该学生 !n);void printc() /* 本函数用于输出中文 */printf(学号t性别英语成绩数学成绩C语言成绩总分平均分n);void printe(Node *p)/* 本函数用于输出英文 */printf(%-12s%st%st%dt%dt%dt %dt %dn,p-data.num,,p-data. sex,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.totle,p-data.ave);Node* Locate(L
31、ink l,char findmess,char nameornum) /* 该函数用于定位连表中 符合要求的接点,并返回该指针 */Node *r;if(strcmp(nameornum,num)=0) /* 按学号查询 */ r=l-next; while(r!=NULL) if(strcmp(r-data.num,findmess)=0) return r;r=r-next;else if(strcmp(nameornum,name)=0) /* 按查询 */r=l-next; while(r!=NULL) if(strcmp(,findmess)=0) retur
32、n r;r=r-next;return 0;void Add(Link l) /* 增加学生 */Node *p,*r,*s;char num10;r=l;s=l-next;while(r-next!=NULL)r=r-next; /* 将指针置于最末尾 */while(1)printf( 请你输入学号 (以0返回上一级菜单 :);scanf(%s,num);if(strcmp(num,0)=0)break;while(s)if(strcmp(s-data.num,num)=0)printf(=提示:学号为s的学生已经存在,若要修改请 你选择4修改!n, num);printstart();p
33、rintc();printe(s);printstart();printf(n);return;s=s-next;p=(Node *)malloc(sizeof(Node);strcpy(p-data.num,num);printf( 请你输入 :);scanf(%s,);getchar();printf(请你输入性别:);scanf(%s,p-data.sex);getchar();printf(请你输入c语言成绩:);scanf(%d,&p-data.cgrade);getchar();printf( 请你输入数学成绩 :);scanf(%d,&p-data.mgra
34、de);getchar();printf( 请你输入英语成绩 :); scanf(%d,&p-data.egrade); getchar();p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle / 3;/* 信息输入已经完成 */ p-next=NULL; r-next=p;r=p; shoudsave=1;void Qur(Link l) /* 查询学生 */int sel;char findmess20;Node *p;if(!l-next)printf(n= 提示 :没有资料可以查
35、询 !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(); printe(p); printstart(); else Nofind();else if(sel=2) /* */printf( 请你输入要查找的 :); scanf(%s,findmess); p=Loc
36、ate(l,findmess,name); if(p)printf(tttt 查找结果 n);printstart();printc();printe(p);printstart();elseNofind();elseWrong();void Del(Link l) /* 删除 */int sel;Node *p,*r;char findmess20;if(!l-next)printf(n= 提示 :没有资料可以删除 !n); return;printf(n=1 按学号删除 n=2 按删除 n); scanf(%d,&sel);if(sel=1)printf( 请你输入要删除的学号 :); s
37、canf(%s,findmess); p=Locate(l,findmess,num); if(p)r=l;while(r-next!=p)r=r-next;r-next=p-next;free(p);printf(n= 提示 :该学生已经成功删除 !n); shoudsave=1; elseNofind();else if(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(p);p
38、rintf(n= 提示 :该学生已经成功删除 !n); shoudsave=1; else Nofind(); elseWrong();void Modify(Link l) /* 本函数用于修改资料 */Node *p;char findmess20; if(!l-next) printf(n= 提示 :没有资料可以修改 !n); return;printf( 请你输入要修改的学生学号 :); scanf(%s,findmess);p=Locate(l,findmess,num);if(p)printf(请你输入新学号(原来是s):,p-data.num); scanf(%s,p-data.
39、num);printf( 请你输入新 (原来是 %s):,); scanf(%s,);getchar();printf(请你输入新性别(原来是s):,p-data.sex);scanf(%s,p-data.sex);printf(请你输入新的c语言成绩(原来是%d分):,p-data.cgrade); scanf(%d,&p-data.cgrade);getchar();printf(请你输入新的数学成绩(原来是%d分):,p-data.mgrade); scanf(%d,&p-data.mgrade);getchar();printf(请你输入新的
40、英语成绩(原来是%d分):,p-data.egrade); scanf(%d,&p-data.egrade);p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle/3;printf(n= 提示:资料修改成功 !n);shoudsave=1;elseNofind();void Disp(Link l) /* 本函数用于显示资料 */int count=0;Node *p;p=l-next;if(!p)printf(n= 提示:没有资料可以显示 !n);return;printf(tttt 显
41、示结果 n);printstart();printc();printf(n);while(p)printe(p);p=p-next;printstart();printf(n);void Tongji(Link l) /* 本函数用于统计分数 */Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高的接点 */Node *r=l-next;if(!r)printf(n= 提示 :没有资料可以统计 !n); return ;pm=pe=pc=pt=pa=r;while(r!=NULL)if(r-data.cgrade=pc-data.cgrade)pc=r;if(r-dat
42、a.mgrade=pm-data.mgrade)pm=r;if(r-data.egrade=pe-data.egrade)pe=r;if(r-data.totle=pt-data.totle)pt=r;if(r-data.ave=pa-data.ave)pa=r;r=r-next;printf( 统计结果 n);printf(总分最高者:t%s %d 分n,,pt-data.totle); printf(平均分最高者:t%s %d 分n,,pa-data.ave); printf(英语最高者:t%s %d 分n,,pe-d
43、ata.egrade);printf(数学最高者:t%s %d 分n,,pm-data.mgrade); printf(c 语言最高者:t%s %d 分n,,pc-data.cgrade); printstart();void Sort(Link l)Link ll;Node *p,*rr,*s;ll=(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-data.totle=p-data.totle) rr=rr-next;if(rr-next=NULL) rr-next=s;else s-next=rr-next; rr-next=s;p=p-next;fre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 实验1 研究匀变速直线运动-2023年高考物理实验专项突破(原卷版)
- 老年人安全游泳知识培训课件
- 第五节 双曲线 2026年高三数学第一轮总复习
- 脑溢血的死亡率有多高
- 天气与气候-2024年中考地理一轮复习知识清单(扣空版)
- 人工智能通识教程(微课版) 课件 04 人工智能技术的觉醒-深度学习技术框架
- 上海市某中学2025-2026学年高三年级上册暑期考试数学试卷(7月份)
- CN120203212A 一种以米粒为支架一步法培养大黄鱼细胞为动植物复合食品的方法
- CN120201845A 一种有机半导体异质结光子突触晶体管及其制备方法
- CN120200250A 一种基于企业供电服务画像的供电服务策略优化方法
- GB/T 39201-2020高铝粉煤灰提取氧化铝技术规范
- GB/T 3836.4-2021爆炸性环境第4部分:由本质安全型“i”保护的设备
- GB/T 20801.6-2020压力管道规范工业管道第6部分:安全防护
- GB/T 19355.2-2016锌覆盖层钢铁结构防腐蚀的指南和建议第2部分:热浸镀锌
- 核心素养视角下教师专业发展课件
- 企业信用信息公告系统年度报告模板:非私营其他企业
- 施工员钢筋工程知识培训(培训)课件
- 质量管理体系审核中常见的不合格项
- 共用水电费分割单模板
- 《阿房宫赋》全篇覆盖理解性默写
- 学校体育学(第三版)ppt全套教学课件
评论
0/150
提交评论