C语言综合应用实例.doc_第1页
C语言综合应用实例.doc_第2页
C语言综合应用实例.doc_第3页
C语言综合应用实例.doc_第4页
C语言综合应用实例.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

C语言综合应用实例一、学生信息管理系统#includestdio.h /*I/O函数*/#includestdlib.h /*其它说明*/#includestring.h /*字符串函数*/#define BUFLEN 100 /* 缓冲区最大字符数 */#define LEN 15 /* 学号和姓名最大字符数,实际请更改 */#define N 100 /* 最大学生人数,实际请更改*/struct record /*结构体*/char codeLEN+1; /* 学号 */char nameLEN+1; /* 姓名 */int age; /* 年龄 */char sex3; /* 性别 */char timeLEN+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() printf(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);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);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,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,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) /*比较字符串是否相等*/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(,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: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;in-1;i+)for(j=n-1;ji;j-)if(strcmp(stuj-1.code,stuj.code)0)strcpy(temp,stuj-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);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() /*插入函数*/ int i=n,j,flag;printf(请输入待增加的学生数:n);scanf(%d,m);do flag=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(请输入第 %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.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() int 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 %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( * nn);printf( * 制作人: * n n);printf( * nn); 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) case 0:help();break;case 1:readfile();break;case 2:seek();break;case 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 stdio.h#include string.h#include ctype.h#include stdlib.h#define STU_NUM40 /* 最多的学生人数 */#define COURSE_NUM10/* 最多的考试科目 */struct studentintnumber;/* 每个学生的学号 */charname10; /* 每个学生的姓名 */intscoreCOURSE_NUM;/* 每个学生M门功课的成绩 */intsum; /* 每个学生的总成绩 */floataverage; /* 每个学生的平均成绩 */;typedef struct student STU;/* 函数功能:向链表的末尾添加从键盘输入学生的学号、姓名和成绩等信息函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/void AppendScore(STU *head, int n, int m)intj;STU*p;for (p=head; phead+n; p+)printf(nInput number:);scanf(%d, p-number);printf(Input name:);scanf(%s, p-name);for (j=0; jm; j+)printf(Input score%d:, j+1);scanf(%d, p-score+j);/*函数功能:打印n个学生的学号、姓名和成绩等信息函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/void PrintScore(STU *head, int n, int 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; phead+n; p+) /* 打印n个学生的信息 */printf(nNo.%3d%8s, p-number, p-name);for (i=0; im; i+)printf(%7d, p-scorei);printf(%11d%9.2fn, p-sum, p-average);/* 函数功能:计算每个学生的m门功课的总成绩和平均成绩函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数整型变量m,表示考试科目函数返回值:无*/void TotalScore(STU *head, int n, int m)STU *p;int i;for (p=head; phead+n; p+)p-sum = 0;for (i=0; im; i+)p-sum = p-sum + p-scorei;p-average = (float)p-sum / m;/* 函数功能:用选择法按总成绩由高到低排序函数参数:结构体指针head,指向存储学生信息的结构体数组的首地址整型变量n,表示学生人数函数返回值:无*/void SortScore(STU *head, int n)int i, j, k;STU temp;for (i=0; in-1; i+)k = i;for (j=i; jn; 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*/int SearchNum(STU *head, int num, int n)int i;for (i=0; in; i+)if (head+i)-number = 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:); 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.Append recordn);printf( 2.List recordn);printf( 3.Search recordn);printf( 4.Sort recordn);printf( 0.Exitn);printf(Please Input your choice:);scanf( %c, ch); /*在%c前面加一个空格,将存于缓冲区中的回车符读入*/return ch;main() charch;intm, n;STU stuSTU_NUM;printf(Input student number and course number(n40,m10):);scanf(%d,%d, n, m);while (1)ch = Menu(); /* 显示菜单,并读取用户输入 */switch (ch)case1:AppendScore(stu, n, m);/* 调用成绩添加模块 */ TotalScore(stu, n, m);break;case2:PrintScore(stu, n, m); /* 调用成绩显示模块 */break;case3:SearchScore(stu, n, m);/* 调用按学号查找模块 */break;case4:SortScore(stu, n); /* 调用成绩排序模块 */printf(nSorted resultn);PrintScore(stu, n, m);/* 显示成绩排序结果 */break;case0:exit(0); /* 退出程序 */printf(End of program!); break;default:printf(Input error!);break;学生成绩管理系统#include stdio.h #include stdlib.h #include string.h int 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=3); return flag; struct student char num10;/* 学号 */ char name20; char sex4; int cgrade; int mgrade; int egrade; int totle; int ave; char neartime10;/* 最近更新时间 */ ; typedef struct node struct student data; struct node *next; Node,*Link; void menu() printf(*); printf(t1登记学生资料ttttt2删除学生资料n); printf(t3查询学生资料ttttt4修改学生资料n); printf(t5保存学生资料ttttt6排序学生资料n); printf(t7统计学生资料ttttt8输出学生资料n); printf(t9帮助信息ttttt0退出系统n); printf(*n); void printstart() printf(-n); void Wrong() printf(n=提示:输入错误!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(Link 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) return 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(); printc(); 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.mgrade); 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=提示:没有资料可以查询!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=Locate(l,findmess,name); if(p) printf(tttt查找结果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else Wrong(); 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(请你输入要删除的学号:); scanf(%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; else Nofind(); else if(sel=2)

温馨提示

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

评论

0/150

提交评论