教务信息管理系统源代码2010.05.20

更新时间:2024-05-10 08:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、要求

教务信息管理系统

1、题目描述

设计一个教务信息管理系统,该程序具有以下功能: (1)录入如下信息:

学生基本信息:如学号、姓名、性别、年龄、宿舍号码、电话号码等。

学生选修课程的基本信息:课程编号、课程名称、考试成绩、平时成绩、综合成绩、学分、重修否等。如果重修,需要考虑重修学期、重修成绩,并且要考虑多次重修的情况。

(2)统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各

门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩、平时成绩、综合成绩)。

(3)统计并输出各班各门功课的平均成绩和总平均成绩。 (4)统计并输出每个同学已修学分。

(5)列出不及格学生清单(学号、姓名、不及格的课程和成绩)。 (6)教务信息其它方面的统计(自行确定,加分项)。 2、题目要求

(1)按照分析、设计、编码、调试和测试过程完成应用程序; (2)学习并使用流程图等工具,并在撰写论文中使用;

(3)程序的各项功能在程序运行时,以菜单方式选择并执行;

(4)要求用户输入数据时,要给出清晰、明确的提示,包括:输入数据的内容、格式及结束方式等

(5)所有的信息存储在文件中,并实现文件读写操作。 3、提示

(1)学生基本信息可以设计一个结构体类型

(2)多个学生基本信息可以以数组或链表来存储。

二、代码:

//##########################################################################################

//##########################################################################################

#include #include

#include #include #include

#define N 500//定义班级的个数

//##################################结构体的定义############################################

//##########################################################################################

struct again//重修结构体 {

char term[3];//重修学期 float total;//重修成绩 };

struct course//课程结构体 {

char num[10];//课程编号 char name[20];//课程名称 float final;//考试成绩

float performance;//平时成绩 float total;//综合成绩 int credit;//学分

char re[5];//是否重修pass或faile

struct again ag[5];//重修情况zui do wu ci int times;//重修次数 };

struct student//学生结构体 {

int Class;//班级 char num[12];//学号 char name[20];//姓名 char sex[5];//性别 int age;//年龄

char room[20];//宿舍号码 char phone[15];//电话号码 int subject;//输入几门课程

struct course cou[10];//课程及成绩 struct student *next;//下一个学生 };

struct score//课程成绩结构体 {

char name[20];//课程名 float final; //考试成绩

float performance;//平时成绩

float total;//综合成绩 };

struct ave//学生平均成绩结构体 {

int Class;//班级

char number[12];//学号 char name[20];//姓名

float studentave;//平均成绩 int subjects;//几门课程

struct score s[10];//课程及成绩 struct ave *next;//下一个学生 };

//######################################函数声明

#######################################################

//#####################################################################################################

struct student *creat();//构建学生成绩链表

void write(struct student *head);//写入磁盘文件 void read(struct student*head);//从文本输出内容

struct ave *studentave(struct student *head);//构建学生平均成绩链表 void sequence(struct ave *heads);//平均成绩从高到低排序输出

void classave(struct student *head);//输出各班各门功课的平均成绩和总平均成绩

void credit(struct student *head);//输出每个同学已修学分 void failstudent(struct student *head);//列出不及格学生清单 struct student *out();//把文件信息读入电脑但不显示 void conclude(struct student*head);//输出学生总数

struct ave *insert(struct ave *heads,struct ave *charu);//按大小顺序插入(为了排序)

struct ave *sort(struct ave *head);

void writeshan(struct student *head);//写入磁盘文件 struct student*del(struct student*head);//删除信息函数 void shan();//删除所有信息函数

struct student*chuli(struct student*head);//处理多余信息函数 struct student *out2(); void shan2();

void read2(struct student *head );//从文件中输出数据 struct student *out3();

void read3(struct student *head );//从文件中输出数据 void chazhao(struct student*head);//按学号查找学生信息

//#####################################主函数

##########################################################

//#####################################分界线

##########################################################

void main()//主函数 {

int function,con=1; char function1[4];

struct student *head,*head2; struct ave *heads; head=NULL;

while(con==1)//当con等于1时,执行循环体 {

printf(\

========================================================================\\n\ printf(\欢迎进入教务信息管理系统 ==========================\\n\ printf(\

========================================================================\\n\

printf(\输 入 学 生 基 本 信 息 @@@ ==\\n\

//printf(\

= …………………………………………………………………………………………==\\n\

printf(\输 出 全 部 基 本 信 息 @@@ ==\\n\

printf(\

= …………………………………………………………………………………………==\\n\

printf(\输 出 学 生 排 名 信 息 @@@ ==\\n\

//printf(\

= …………………………………………………………………………………………==\\n\

printf(\输 出 各 班 成 绩 信 息 @@@ ==\\n\

printf(\

= …………………………………………………………………………………………==\\n\

printf(\输 出 学 生 总 的 学 分 @@@ ==\\n\

//printf(\

= …………………………………………………………………………………………==\\n\

printf(\列 出 不 及 格 的 学 生 @@@ ==\\n\

//printf(\

= …………………………………………………………………………………………==\\n\

printf(\按 学号 查找 学生 信息 @@@ ==\\n\

printf(\

= …………………………………………………………………………………………==\\n\

printf(\按 条 件 删 学 生 信 息 @@@ ==\\n\

//printf(\

= …………………………………………………………………………………………==\\n\

printf(\删 除 所 有 学 生 信 息 @@@ ==\\n\

printf(\

= …………………………………………………………………………………………==\\n\

printf(\复 制 现 有 学 生 信 息 @@@ ==\\n\

//printf(\

= …………………………………………………………………………………………==\\n\

printf(\输 出 已 复 制 的 信 息 @@@ ==\\n\

printf(\

= …………………………………………………………………………………………==\\n\

printf(\退 出 @@@ ==\\n\

printf(\

========================================================================\\n\/主界面

printf(\请 输 入 数 字 选 择 相 应 的 操 作 ===============\\n\ printf(\

========================================================================\\n\ function1[0]=getchar(); function1[1]=getchar(); function1[2]=getchar(); fflush(stdin);//清除缓存

if(function1[0]>='0'&&function1[0]<='1'&&function1[1]>='0'&&function1[1]<='9'&&function1[2]=='\\n')

function=(function1[0]-48)*10+(function1[1]-48); switch(function) {

case 1:head=creat();write(head);break;//录入信息,写入磁盘文件 case 2:head=out();read(head);break;//输出文本的内容

case 3:head=out();heads=studentave(head);sequence(heads);break;//按平均成绩从高到输出学生成绩

case 4:head=out();classave(head);break;//输出各班各门功课的平均成绩及总平均成绩

case 5:head=out();credit(head);break;//统计并输出每个同学的已修学分 case 6:head=out();failstudent(head);break;//列出不及格学生清单 case 7:head=out(); chazhao(head);break;//输出学生个数 case 8:head=out();head=del(head);break;//删除学生信息

case 9:shan();break; //删除所有信息 case

10:head=out();head=chuli(head);writeshan(head);head=out();read2(head);break;//复制信息

case 11:head=out2();read2(head);break;//打开复制信息 case 12:exit(0);

defaul: system(\输入错误\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\出错 }

function=0;

printf(\^^^^^^^^^^^^^^\\n\

printf(\此操作已结束,若要继续操作其他功能,请按回车键,回到主菜单***********\\n\是否退出程序

printf(\————————————————————————————————————————\\n\

fflush(stdin);//清除缓存 getchar();

fflush(stdin);//清除缓存

system(\ } }

//#################################### 二

##################################################### //##################################输入信息

###################################################

struct student *creat()//构建学生成绩链表 {

struct student*head=NULL, *stu,*p1;//声明学生结构体指针 int j=0,i=0,con=1,n=0,k; char c[4];

system(\

stu=(struct student*)malloc(sizeof(struct student));//开辟空间 printf(\现在开始输入学生基本信息###########################\\n\\n\开始输入学生信息 while(con==1) {

printf(\真的要输入信息吗?如果不想输入,请输入 0 ,否则输入其它任一数字 \ scanf(\

if(k==0) return(head); system(\

printf(\、请输入你的班级(数字):\

printf(\****************\\n\

printf(\请注意:\\n\\n 第一位代表年级;第二位代表专业 (1、网络工程 2、软件工程 \\n\\n 3、计算机科学与技术 4、地理信息系统 5、教技 6、工业工程 7、信管 \\n\\n 8、测绘 9、软件工程(软件学院));第三位代表班级!\\n\\n\ printf(\如 112表示09网络工程(2)班 \\n\

printf(\************\\n\

scanf(\班级 printf(\

printf(\、请输入你的学号(最多11位符号):\ scanf(\学号 printf(\

printf(\、请输入你的性别, 男 或 女:\ scanf(\性别 printf(\

while((strcmp(\男\女\ {

printf(\输入错误,请重新输入:\ scanf(\性别 printf(\ }

printf(\、请输入你的年龄:\ scanf(\年龄 printf(\

printf(\、请输入你的姓名(最多19位符号):\ scanf(\姓名 printf(\

printf(\、请输入你的宿舍号码(最多19位符号):\ scanf(\宿舍号码 printf(\

printf(\、请输入你的电话号码(最多14位符号):\ scanf(\电话号码 printf(\

printf(\、请输入你所选的课程的门数:\

scanf(\输入学生选修的课程数 printf(\

for(j=0;jsubject;j++)//输入M门课程信息 {

printf(\、输入课程编码(最多10):\ scanf(\课程编号 printf(\

printf(\、输入课程名称(最多20位):\ scanf(\课程名称 printf(\

printf(\、输入学生的考试成绩:\

scanf(\考试成绩 printf(\

printf(\、输入学生的平时成绩:\

scanf(\平时成绩 printf(\

printf(\、输入学生的综合成绩:\ scanf(\总成绩 printf(\

printf(\、输入学生的已修的总学分:\ scanf(\学分 printf(\

if((stu->cou[j].total<60.0)&&(stu->cou[j].total>0)) strcpy(stu->cou[j].re,\

else strcpy(stu->cou[j].re,\是否通过考试 if(strcmp(\ {

printf(\、学生没考过这门课\\n\ printf(\、请输入重修次数:\ scanf(\ printf(\

for(i=0;icou[j].times;i++) {

printf(\、输入重修的学期(不超过3个字符,按先后顺序):\ scanf(\重修学期 printf(\

printf(\、输入考试分数:\

scanf(\重修分数 printf(\ } } }

printf(\、如果输入的信息正确,请输入 y ,否则请输入 n :\

printf(\

printf(\ printf(\ scanf(\ printf(\

if(strcmp(c,\ { n++;

if(n==1)

head=stu; else

p1->next=stu; p1=stu;

}//构建学生链

stu=(struct student*)malloc(sizeof(struct student));//开辟空间 printf(\、如果停止输入学生基本信息,请输 0 ;否则请输入 1 :\ printf(\ printf(\ printf(\ printf(\

scanf(\是否结束输入学生信息 printf(\

system(\//ce shi }

p1=NULL; //ceshi stu=NULL;

return(head);//返回头指针 }

//##################################### 三

################################################### //###################################保存信息

#################################################

void write(struct student *head)//写入磁盘文件 {

FILE *fp;

struct student *stu; stu=head;

system(\

fp=fopen(\学生基本信息.txt\打开文本 if(head==NULL); else {

while(stu!=NULL) {

fwrite(stu,sizeof(struct student),1,fp); stu=stu->next;//下一个学生 } }

fclose(fp);//关闭文件 }

//####################################### 四 ################################################ //#################################输出学生基本信息##########################################

void read(struct student *head )//从文件中输出数据 {struct student*stu; int n=0,i,j,k,l,f; system(\stu=head;

if(head==NULL) {

printf(\对不起,还没有学生的信息,请问是否输入新信息,若要请输入‘1’;否则请输入‘0’\\n\\n\ scanf(\ if(k==1) {

head=creat(); write(head); system(\

printf(\信息输入完毕,请问是否马山打开,若是请输入 1 否则输入任一数字\\n\\n\ scanf(\

if(f==1){head=out();read(head);} else {system(\ }

else {system(\}

printf(\以下是所有学生的个人基本信息以及具体选课信息\\n\printf(\**********\while(stu!=NULL) {

if(stu->ClassClass>0) { n++;

printf(\---------\\n\

printf(\第%d位学生的信息++++++++++++++++++++++++++++++++++++\\n\

printf(\---------\\n\

printf(\①个人基本信息:\\n\printf(\

printf(\班级:%-5d 学号:%-11s宿舍号码:%-19s性别:%-5s\\n\\n 年龄:%-5d 姓

名:%-11s电话号码:%-19s科

数:%-5d\\n\\n\stu->phone ,stu->subject );

for(j=0,l=1;jsubject;j++,l++)

{printf(\----------\\n\

printf(\②选课具体信息:\printf(\第%d科####\\n\printf(\printf(\课程编号:%-19s课程名称:%-19s学

分:%-d\\n\\n\printf(\考试成绩:%-19.1f平时成绩:%-19.1f综

合:%-.1f\\n\\n\printf(\③考试情况(若是fail则需重修):%s\\n\printf(\if(strcmp(\

{printf(\重修次数:%-20d\\n\\n\for(i=0;icou[j].times;i++) {printf(\重修学期:%-20s重修分

数:%-20.1f\\n\} }

}stu=stu->next; }

printf(\----------\

printf(\共 有 - 位 学 生 的 信 息,已 全 部 输 出\\n\ }

//####################################### 五

######################################################## //####################################统计个人平均###################################################

struct ave *studentave(struct student *head)//构建学生平均成绩链表 {

struct student *p1;

struct ave *s,*heads,*p;

struct ave *pp1; // ceshi

float a=0,sum=0;

int i=0,n=1,l=0,f=0;

int k; //ceshi

system(\ p1=head;

if(head==NULL) {

printf(\对不起,还没有学生的信息,请问是否输入新信息,若要请输入 1 ;否则请输入任一数字 \\n\\n\ scanf(\ if(l==1) {

head=creat();write(head);

printf(\信息输入完毕,请问是否马山统计并输出学生的排名信息,若是请输入 1 否则输入任一数字\\n\\n\ scanf(\

if(f==1){head=out();heads=studentave(head);sequence(heads);} else _exit(0); }

else {system(\ } else {

printf(\==============\\n\ while(p1!=NULL) {

if(p1->ClassClass>0) //ce shi yu yu yong //神奇之比,搞得我找了好几个小时才想到,哈哈 {

s=(struct ave*)malloc(sizeof(struct ave));//开辟空间 sum=0;

for(i=0;isubject;i++) {

sum=sum+p1->cou[i].total;//各门课程总成绩相加 s->s[i].final=p1->cou[i].final;

s->s[i].performance=p1->cou[i].performance; s->s[i].total=p1->cou[i].total;

printf(\考试成绩:%-9.1f平时成绩:%-9.1f综合成

绩:%-9.1f\\n\

strcpy(s->s[i].name,p1->cou[i].name);//把课程结构体的考试成绩,平时成绩,总成绩,课程名放到平均分结构体中 }

a=sum/p1->subject;//每个学生的平均分 printf(\平均分:%-9.1f\ s->studentave=a;

s->subjects=p1->subject;

s->Class=p1->Class;

strcpy(s->number,p1->num);

strcpy(s->name,p1->name);//把学生结构体的班级,学号,姓名放到平均分结构体中

if(n==1) heads=s; else p->next=s;

p=s;//构建平均成绩链表 n++; }

p1=p1->next;//下一个学生 }

p->next=NULL; }

return(heads); }

//######################################## 六

########################################################### //####################################按平均分排名次#####################################################

struct ave *sort(struct ave *heads)//排大小顺序函数 {

struct ave *p1,*p2; p1=p2=heads;

if(heads->next==NULL) return(heads); p2=p2->next; p1->next=NULL; p1=p2;

while(p2->next!=NULL) {

p2=p2->next; p1->next=NULL;

heads=insert(heads,p1); p1=p2; }

heads=insert(heads,p1); return(heads); }

//########################################### 七

##################################################### //########################################按顺序插入

##################################################

struct ave *insert(struct ave *heads,struct ave *charu)//按大小顺序插入(为了排序) {

struct ave *p0,*p1,*p2; int i;//ceshi p1=heads; p0=charu;

if(heads==NULL) {

heads=p0;

p0->next=NULL; } else {

while((p0->studentavestudentave)&&(p1->next!=NULL)) {

p2=p1;

p1=p1->next; }

if(p0->studentave>=p1->studentave) {

if(heads==p1) heads=p0; else

p2->next=p0; p0->next=p1; } else {

p1->next=p0; p0->next=NULL; } }

return(heads); }

//###################################### 八

############################################################# //################################输出大小顺序的信息#####################################################

void sequence(struct ave *heads)//平均成绩从高到低排序输出 {

struct ave *s,*p1; int i=0,n=1,k=0; s=heads;

system(\ if(heads==NULL) {

printf(\没有平均成绩信息\\n\ return; } else

{heads=sort(heads); system(\ p1=heads; while(p1!=NULL)

{ if(n<=9)

printf(\第0%d名:\\n\输出名次 else

printf(\第%d名:\\n\ printf(\

printf(\班级:%-10d学号:%-16s姓名:%-16s平均成绩:%-7.1f科

目:%-4d\\n\

printf(\----------\\n\

for(i=0;isubjects;i++) {

printf(\课名:%-10s考试:%-15.1f 平时:%-15.1f 综合成

绩:%-9.1f\\n\;

}

printf(\

printf(\**********\\n\

p1=p1->next;//下一个平均成绩 n++; } } }

//######################################### 九

#########################################################

//##################################输出各班各科平均成绩################################################

void classave(struct student *head)//输出各班各门功课的平均成绩和总平均成绩 {

int c[N]={0},i,j;

struct student *s,*p=NULL;

float sum[8]={0},a[8],av=0,b=0; if(head==NULL)

printf(\没有学生信息\\n\\n\\n\\n\\n\\n\ else {

for(i=1;i

s=head;

while(s!=NULL) {

if(s->Class==i)//寻找班级相同的学生 {

c[i]++; p=s;

for(j=0;jsubject;j++)

sum[j]=sum[j]+s->cou[j].total;//i班的各门功课总成绩相加 }

s=s->next; }

if(p!=NULL) {

printf(\***************\\n\

printf(\班每科平均成绩与总平均成绩###########################* \

printf(\*************\\n\\n\

printf(\班级 课程名称 平均分\\n\

for(j=0;jsubject;j++) {

a[j]=sum[j]/c[i];//i班各门功课的平均分 sum[j]=0;

printf(\

_____________\\n\ if(i<=9)

printf(\ else if(i<100)

printf(\ else

printf(\ av=av+a[j];//i班各门功课的平均分相加 }

b=av/p->subject;//i班总平均分

printf(\============\\n\

printf(\该班学生总数为:%-10d班级总分为:%-9.1f总平均成绩是:%-9.1f\\n\

p=NULL; av=0; } } } }

//######################################## 十

######################################################## //##############################统计并输出每位学生的已修学分##########################################

void credit(struct student *head)//输出每个同学已修学分 {

struct student *p; int credit=0,i; system(\ p=head;

if(head==NULL)

{printf(\没有学生信息\\n\\n\\n\\n\\n\\n\ else {

if(p->ClassClass>0) {

printf(\________\\n\

printf(\学生已修学分\\n\学生已修学分

printf(\________\\n\

printf(\学号 学生姓名 已修学分\\n\ }

else {printf(\还 没 有 学 生 信 息,故 没 有 学 分\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\ return;}

while(p!=NULL) {

if(p->ClassClass>0) {for(i=0;isubject;i++) {

if(strcmp(\

credit=credit+p->cou[i].credit;//及格的课程的学分相加 }

printf(\_________\\n\ printf(\%-16s %-20s %d\\n\ credit=0; }

p=p->next;//下一个 学生 }

printf(\************\\n\

printf(\已 输 出 各 位 学 生 的 总 学 分\\n\ } }

//###################################### 十一

###################################################### //##############################统计并输出不及格学生信息############################################

void failstudent(struct student *head)//列出不及格学生清单 {

struct student *stu;

int j,n;

int k=00;//wei le···

int a=0,b=0,c=0,sum=0;//用来统计不及格学生个数 system(\ stu=head;

if(head==NULL){printf(\没有学生信息\\n\\n\\n\\n\\n\\n\没有学生信息 else

{ if(stu->ClassClass>0) {

printf(\************\\n\

printf(\以下为不及格的学生信息 *\\n\不及格的学生

printf(\********\\n\

printf(\学号 姓名 课程名称 成绩\\n\

printf(\********\\n\ }

else {printf(\还没有学生的信息,所以没有不及格的学生信息!\\n\\n\\n\\n\\n\\n\\n\\n\\n\ while(stu!=NULL) {

if(stu->Class

for(j=0;(strcmp(\找到第一门不及格的课程或没有不及格的课程 if(jsubject) {a=1; //tong ji yong

printf(\cou[j].total);

printf(\--------\\n\ n=j;

if(jsubject) {

for(j=n+1;jsubject;j++)

if(strcmp(\寻找其他不及格的课程 {b=1;//tong ji yong

printf(\j].total);

printf(\-------\\n\

} } } }

c=(a>b)?a:b;//tong ji yong a=b=0;//tong ji yong sum=c+sum;//tong ji yong stu=stu->next;//下一个学生 }

}if(sum==0)printf(\哈哈,放心, 没有不及格的学生\\n\\n\\n\\n\\n\\n\

else printf(\【一共有 [ %d ] 位学生有不及格的科目】\\n\\n\}

//##################################### 十二

######################################################## //################################输出总的学生个数################################################### void conclude(struct student*head)//统计学生个数 {

struct student*p1,*p2; int n=0; p2=p1=head; while(p1!=NULL) {

p2=p1;

p1=p2->next; n++; } n--;

printf(\

printf(\ printf(\ printf(\ printf(\

printf(\ printf(\ printf(\ printf(\^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\

printf(\到 现 在 为 止 , 有 %d 位 学 生 登 录 注 册\\n\

printf(\^^^^^^^^^^^^^^^^^^^^^^^^^\\n\\n\\n\}

//##################################### 十三

######################################################## //############################从文件中写出但不显示信息###############################################

struct student *out() {

FILE *fp;

struct student *head,*p1,*stu; int n=0,k=0; system(\ p1=head=NULL;

if((fp=fopen(\学生基本信息.txt\ return(head); else {

while(!feof(fp)) {

n++;

stu=(struct student*)malloc(sizeof(struct student));//开辟空间 fread(stu,sizeof(struct student),1,fp); if(n==1)

head=stu; else

p1->next=stu; p1=stu;//构建学生链 }

p1->next=NULL; fclose(fp); }

return(head); }

//########################################### 十四

#####################################################

//#####################################删除学生个人所有信息#############################################

struct student*del(struct student*head)//删除信息函数 {

struct student*p1,*p2; p1=head;

char num[12],b[7]; int n=0;

printf(\请输入你要删除的学生的学号:\\n\\n\ scanf(\ system(\

printf(\提醒:信息删除之后无法恢复,是否确定要删除?\\n\\n 若真要删请输入[ delete ],否则输入任一字符!\ scanf(\ fflush(stdin); system(\

if(strcmp(\ {

if(head==NULL) {

printf(\还 没 有 没 有 学 生 的 信 息\ return(head); }

while(strcmp(num,p1->num)!=0&&(p1->next!=NULL)) {

p2=p1;

p1=p1->next; }

if(strcmp(num,p1->num)==0) {

if(head==p1) head=p1->next; else

p2->next=p1->next; writeshan(head);

printf(\学号为[%s]的学生的信息已被删除############################\\n\\n\\n\

printf(\请问是否查看删除后剩余的学生信息,若要请输入 1 ,否则输入任一数字!\

scanf(\ system(\

if(n==1)read3(head);

} else {

printf(\对 不 起,这 里 没 有 学 号 为[ %s ]的 信 息\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\ } } else

printf(\ return(head); }

//##################################### 十五

################################################### //############################保存复制的信息信息##########################################

void writeshan(struct student *head)//写入磁盘文件 {

FILE *fp;

struct student *stu; int n=0;

fp=fopen(\学生基本信息.txt\打开文本 stu=head;

//system(\//ce shi

if(head==NULL)

{printf(\文件中还没有学生基本信息\\n\ else {

while(stu!=NULL&&stu->ClassClass>0)

if(stu->ClassClass>0) //ce shi yu yu yong { {n++;

fwrite(stu,sizeof(struct student),1,fp); printf(\

============================================\\n\

printf(\删除后剩余学生的姓名: %-2d、%-12s……\\n\

printf(\…………………………………………………………\\n\ stu=stu->next;//下一个学生

} }

printf(\

============================================\\n\

printf(\提示:若姓名为空号,则是无效的学生信息!\

printf(\============================================\\n\ //printf(\ }

fclose(fp);//关闭文件 }

//######################################## 十六 ################################################ //#####################################删除所有信息############################################# void shan() {

FILE*fp;

char ch[5],a[30],b[10]; char c[10]; system(\

printf(\请问是删除原有信息还是已复制的信息?\\n\\n\\n 若是原有信息则请输入[yuan],若是复制信息则输入[fuzhi],否则输入任一字符\

scanf(\ fflush(stdin); system(\

if(strcmp(\

else if(strcmp(\ else return;

printf(\年轻人,别冲动,悄悄一按,所有信息将瞬间永远地消失,\\n\\n\\n\\n\\n\\n 若醒悟了,还来得及,记住,不要按【 yes 】,否则全没了哈!\\n\\n\ scanf(\ system(\

if(strcmp(\ {

printf(\你还真要全删呀?最好就别那么狠哈,否则,辛辛苦苦的输入就白费了!\\n\\n\

printf(\若 果 你 确 定 真 的 要 全 删,就 输 入 [ wohaizhengyaoshanne ]\\n\\n\ scanf(\ system(\

if(strcmp(\

{

printf(\哎呀,那可真没办法了,最后输入[ jiushiyaoshan ]吧\\n\ scanf(\

if(strcmp(b,\ {

fp=fopen(\学生基本信息.txt\

printf(\所 有 学 生 信 息 已 成 功 删 除\\n\\n\\n\\n\\n\\n\\n\\n\\n\ fclose(fp); } } }

return; }

//##################################### 十七

################################################## //################################复制学生信息函数#############################################

struct student*chuli(struct student*head)//处理多余信息函数 {

struct student*p1,*p2,*stu,*stu2,*p3; FILE*fp;

fp=fopen(\学生基本信息2.txt\删除原有信息 fclose(fp);

fp=fopen(\学生基本信息2.txt\int k=0,i,j;

int n=0,l; //ce shi p1=head;

p2=(struct student*)malloc(sizeof(struct student)); stu2=p3=p2; while(p1!=NULL) {

if(p1->ClassClass>0) {

k++;

p2->subject=p1->subject;

//printf(\shu:%-10d\\n\ strcpy(p2->num,p1->num); strcpy(p2->name,p1->name); strcpy(p2->phone,p1->phone);

p2->Class=p1->Class; strcpy(p2->sex,p1->sex); strcpy(p2->room,p1->room); p2->age=p1->age;

for(j=0;jsubject&&j<10;j++) {

strcpy(p2->cou[j].num,p1->cou[j].num); strcpy(p2->cou[j].name,p1->cou[j].name); p2->cou[j].final=p1->cou[j].final;

p2->cou[j].performance=p1->cou[j].performance; p2->cou[j].total=p1->cou[j].total; p2->cou[j].credit=p1->cou[j].credit; strcpy(p2->cou[j].re,p1->cou[j].re); if(strcmp(p1->cou[j].re,\ {

for(i=0;icou[j].times&&i<10;i++) {

strcpy(p2->cou[j].ag[i].term,p1->cou[j].ag[i].term); p2->cou[j].ag[i].total=p1->cou[j].ag[i].total; }

p2->cou[j].times=p1->cou[j].times; } }

stu=p2;//ce shi

{n++; printf(\---------\\n\

printf(\第%d个学生的信息+++++++++++++++++++++++++++++++++++\\n\

printf(\---------\\n\

printf(\①个人基本信息:\\n\printf(\printf(\班级:%-5d 学号:%-15s宿舍号码:%-11s性别:%-5s\\n 年龄:%-5d 姓名:%-15s电话号码:%-11s科

数:%-5d\\n\\n\stu->phone ,stu->subject );

for(j=0,l=1;jsubject;j++,l++) {

printf(\---------\\n\

printf(\②选课具体信息:\printf(\第%d科####\\n\printf(\

printf(\课程编号:%-20s课程名称:%-20s\\n\printf(\考试成绩:%-20.1f平时成

绩:%-20.1f\\n\printf(\综合成绩:%-20.1f学

分 :%-20d\\n\\n\

printf(\③考试情况(若是fail则需重修):%s\\n\printf(\if(strcmp(\ for(i=0;icou[j].times;i++) printf(\重修学期:%-20s重修分

数:%-20.1f\\n\ }

}//ce shi

if(stu->ClassClass>0) {

printf(\这是第 [%d] 位学生的全部具体信息,是否要复制,若要请输入 [1] ,否则输入任一数字\

scanf(\ }

fwrite(p2,sizeof(struct student),1,fp); p3->next=p2; p3=p2;

p2=(struct student*)malloc(sizeof(struct student));//////// }

system(\//ce shi

p1=p1->next; }

fclose(fp); p2=NULL;

return(stu2); }

//##################################### 十八

######################################################## //#############################打开处复制的文件信息##################################################

struct student *out2() {

FILE *fp;

struct student *head,*p1,*stu;

int n=0,k=0; system(\ p1=head=NULL;

if((fp=fopen(\学生基本信息2.txt\ {

printf(\没 有 文 件 信 息\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\打开文件 exit(0); } else {

while(!feof(fp)) {

n++;

stu=(struct student*)malloc(sizeof(struct student));//开辟空间 fread(stu,sizeof(struct student),1,fp); if(n==1)

head=stu; else

p1->next=stu; p1=stu;//构建学生链 }

p1=stu=NULL; fclose(fp); }

return(head); }

//######################################## 十九 ################################################

//###################################删除复制的所有信息#########################################

void shan2() {

FILE*fp; char ch[11]; system(\

fp=fopen(\学生基本信息2.txt\ printf(\输出值:%d\\n\

printf(\所有复制的的学生信息都已被删除了**************************\\n\\n\\n\\n\\n\\n\\n\\n\\n\ fclose(fp); }

//####################################### 二十 ################################################

//###############################输出复制的学生基本信息########################################

void read2(struct student *head )//从文件中输出数据 {struct student*stu; int n=0,i,j,k,l; stu=head;

printf(\以下是复制的学生的个人基本信息以及具体选课信息\\n\

printf(\**********\\n\while(stu!=NULL) {

if(stu->ClassClass>0) { n++;

printf(\---------\\n\

printf(\第%d个学生的信息++++++++++++++++++++++++++++++++++++\\n\

printf(\---------\\n\

printf(\①个人基本信息:\\n\printf(\printf(\班级:%-5d 学号:%-15s宿舍号码:%-11s性别:%-5s\\n 年龄:%-5d 姓名:%-15s电话号码:%-11s科

数:%-5d\\n\\n\stu->phone ,stu->subject );

for(j=0,l=1;jsubject;j++,l++)

{printf(\----------\\n\

printf(\②选课具体信息:\printf(\第%d科####\\n\printf(\

printf(\课程编号:%-20s课程名称:%-20s\\n\printf(\考试成绩:%-20.1f平时成

绩:%-20.1f\\n\printf(\综合成绩:%-20.1f学

分 :%-20d\\n\\n\

printf(\③考试情况(若是fail则需重修):%s\\n\printf(\if(strcmp(\

{printf(\重修次数:%-20d\\n\for(i=0;icou[j].times;i++) {printf(\重修学期:%-20s重修分

数:%-20.1f\\n\\n\} }

}stu=stu->next; }

printf(\----------\

printf(\这 是 已 复 制 了 的 [%d] 位 学 生的 信 息\\n\}

//##################################### 二十一

###################################################### //############################从文件中写出但不显示信息###############################################

struct student *out3() {

FILE *fp;

struct student *head,*p1,*stu; int n=0,k=0; system(\ p1=head=NULL;

if((fp=fopen(\学生基本信息3.txt\ return(head); else {

while(!feof(fp)) {

n++;

printf(\//ce shi

stu=(struct student*)malloc(sizeof(struct student));//开辟空间 fread(stu,sizeof(struct student),1,fp);

printf(\//ce shi

if(n==1)

head=stu; else

p1->next=stu; p1=stu;//构建学生链 }

p1=stu=NULL;

fclose(fp); }

return(head); }

//####################################### 二十二 ############################################

//#################################输出学生基本信息##########################################

void read3(struct student *head )//从文件中输出数据 {struct student*stu; int n=0,i,j,k,l,f; system(\stu=head;

if(head==NULL) {

printf(\对不起,还没有学生的信息,请问是否输入新信息,若要请输入‘1’;否则请输入‘0’\\n\\n\ scanf(\ if(k==1) {

head=creat(); write(head); system(\

printf(\信息输入完毕,请问是否马山打开,若是请输入 1 否则输入任一数字\\n\\n\ scanf(\

if(f==1){head=out();read(head);} else {system(\ }

else {system(\}

printf(\以下是删除后所剩学生的个人基本信息以及具体选课信息\\n\printf(\**********\while(stu!=NULL) {

if(stu->Class

printf(\---------\\n\

printf(\第%d位学生的信息++++++++++++++++++++++++++++++++++++\\n\

printf(\---------\\n\

printf(\①个人基本信息:\\n\printf(\printf(\班级:%-5d 学号:%-15s宿舍号码:%-11s性别:%-5s\\n 年龄:%-5d 姓名:%-15s电话号码:%-11s科

数:%-5d\\n\\n\stu->phone ,stu->subject );

for(j=0,l=1;jsubject;j++,l++)

{printf(\----------\\n\

printf(\②选课具体信息:\printf(\第%d科####\\n\printf(\printf(\课程编号:%-20s课程名称:%-20s\\n\\n\printf(\考试成绩:%-20.1f平时成

绩:%-20.1f\\n\\n\printf(\综合成绩:%-20.1f学

分 :%-20d\\n\\n\

printf(\③考试情况(若是fail则需重修):%s\\n\printf(\if(strcmp(\

{printf(\重修次数:%-20d\\n\\n\for(i=0;icou[j].times;i++) {printf(\重修学期:%-20s重修分

数:%-20.1f\\n\} }

}stu=stu->next; }

printf(\----------\

printf(\删 除 信 息 后 还 剩 - 位 学 生 的 信 息\\n\}

//################################### 二十三

#################################################### //###############################按学号查找学生信息 ##############################################

void chazhao(struct student*head)//按学号查找学生信息 {

struct student*stu,*p2; char xuehao[15];

char xiu[15],xiangmu[20],xinxinxi[20];//xiu gai xin xi yong

int i=0,j=0,l=0; int kemu;//

//char xuan='y';//xiu gai xin xi yong stu=head;

printf(\请输入要查找的学生的学号:\\n\\n\ scanf(\ system(\

while(strcmp(stu->num,xuehao)!=0&&stu->next!=NULL) {

p2=stu;

stu=stu->next; }

if( strcmp(stu->num,xuehao)==0) {

//printf(\n\

printf(\①个人基本信息:\\n\printf(\

printf(\班级:%-5d 学号:%-11s宿舍号码:%-19s性别:%-5s\\n\\n 年龄:%-5d 姓名:%-11s电话号码:%-19s科

数:%-5d\\n\\n\stu->phone ,stu->subject );

for(j=0,l=1;jsubject;j++,l++)

{printf(\----------\\n\

printf(\②选课具体信息:\printf(\第%d科####\\n\printf(\printf(\课程编号:%-19s课程名称:%-19s学

分:%-d\\n\printf(\考试成绩:%-19.1f平时成绩:%-19.1f综

合:%-.1f\\n\printf(\③考试情况(若是fail则需重修):%s\\n\printf(\if(strcmp(\

{printf(\重修次数:%-20d\\n\for(i=0;icou[j].times;i++) {printf(\重修学期:%-20s重修分

数:%-20.1f\\n\} } }

else {printf(\对不起,没找到学号为%s的学生的信息 \\n\\n\

printf(\

****************\\n\

printf(\学 号 为 [ %s] 的 学 生 的 信 息 输 出 完 毕!\\n\

printf(\请问是否修改个人信息,若是,请输入【是】,否则输入任一字符!\\n\

scanf(\ if(strcmp(\是\

{system(\请输入要修改的选项(注意,暂时只能修改学号、姓名\\n\\n 性别、电话号码、课程编号、课程名称):\ scanf(\

printf(\请输入新的信息:\\n\\n\

scanf(\ while(strcmp(\是\ {

if(strcmp(xiangmu,\学号\修改信息成功\\n\\n\\n\

else if(strcmp(xiangmu,\姓名

\修改信息成功\\n\\n\\n\

else if(strcmp(xiangmu,\性别\修改信息成功\\n\\n\\n\

else if(strcmp(xiangmu,\电话号码

\修改信息成功\\n\\n\\n\

else if(strcmp(xiangmu,\课程编号\请选择第几课:\\n\\n\

scanf(\

{strcpy(stu->cou[kemu-1].num,xinxinxi);system(\修改信息成功\\n\\n\\n\

printf(\输入错误,修改未成功\\n\\n\

else if(strcmp(xiangmu,\课程名称\请选择第几课:\\n\\n\

scanf(\

{strcpy(stu->cou[kemu-1].name,xinxinxi);system(\修改信息成功\\n\\n\\n\

printf(\输入错误,修改未成功\\n\\n\

//{strcpy(stu->cou[j].name,xinxinxi);printf(\修改信息成功\\n\\n\\n\

else printf(\修改未成功,请检查是否按要求输入!\\n\\n\请问是否继续修改,若是若是,请输入【是】,否则输入任一字符!\\n\

scanf(\ if(strcmp(\是\

{system(\请输入要修改的选项(注意,

暂时只能修改学号、姓名\\n\\n 性别、电话号码、课程编号、课程名称):\ scanf(\

printf(\请输入新的信息:\\n\\n\\n\\n\

scanf(\} }}

else return;

writeshan(head);//return; head=out(); stu=head;

system(\

while(strcmp(stu->num,xuehao)!=0&&stu->next!=NULL) {

p2=stu;

stu=stu->next; }

if( strcmp(stu->num,xuehao)==0) {

//printf(\n\

printf(\①个人基本信息:\\n\printf(\

printf(\班级:%-5d 学号:%-11s宿舍号码:%-19s性别:%-5s\\n\\n 年龄:%-5d 姓名:%-11s电话号码:%-19s科

数:%-5d\\n\\n\stu->phone ,stu->subject );

for(j=0,l=1;jsubject;j++,l++)

{printf(\----------\\n\

printf(\②选课具体信息:\printf(\第%d科####\\n\printf(\printf(\课程编号:%-19s课程名称:%-19s学

分:%-d\\n\printf(\考试成绩:%-19.1f平时成绩:%-19.1f综

合:%-.1f\\n\printf(\③考试情况(若是fail则需重修):%s\\n\printf(\if(strcmp(\

{printf(\重修次数:%-20d\\n\for(i=0;icou[j].times;i++) {printf(\重修学期:%-20s重修分

数:%-20.1f\\n\}

} }

else {printf(\对不起,没找到学号为%s的学生的信息 \\n\\n\

printf(\****************\\n\

printf(\学 号 为 [ %s] 的 学 生 的 【修 改 后】 的 信 息 !\\n\

printf(\}

本文来源:https://www.bwwdw.com/article/lvrg.html

Top