学生成绩管理系统.docx

上传人:b****1 文档编号:20126246 上传时间:2023-04-25 格式:DOCX 页数:40 大小:20.90KB
下载 相关 举报
学生成绩管理系统.docx_第1页
第1页 / 共40页
学生成绩管理系统.docx_第2页
第2页 / 共40页
学生成绩管理系统.docx_第3页
第3页 / 共40页
学生成绩管理系统.docx_第4页
第4页 / 共40页
学生成绩管理系统.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统.docx

《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(40页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统.docx

学生成绩管理系统

#include

#include

#include

#include//引用头文件

structA

{

intnum;

charname[20];

intscore[3];

structA*next;

};//声明学生成绩结构体变量

/*声明学生成绩管理系统各函数*/

voidAadd(charfilename[20]);//声明学生成绩管理系统添加功能函数

voidAdel(charfilename[20]);//声明学生成绩管理系统删除功能函数

voidAchange(charfilename[20]);//声明学生成绩管理系统修改功能函数

voidAsearch(charfilename[20]);//声明学生成绩管理系统查找功能函数

voidAsave(structA*pt,charfilename[20]);//声明学生成绩管理系统文件保存函数

voidEND();//声明结束函数

structA*Acreate();//声明学生成绩管理系统新建函数

structA*Aread(charfilename[20]);//声明学生成绩管理系统文件输出函数

/*定义结束函数*/

voidEND()

{

printf("###############################################################################\n");

printf("##\n");

printf("#谢谢您的使用,欢迎下次使用,再见!

#\n");

printf("##\n");

printf("###############################################################################\n");

}

/*定义学生成绩管理系统新建函数*/

structA*Acreate()

{

structA*p,*q,*head;

inta=0;charch;

p=q=(structA*)malloc(sizeof(structA));//开辟一个新单元

head=NULL;

printf("学号:

");

scanf("%d",&p->num);//输入第一个学生的学号

printf("姓名:

");

scanf("%s",p->name);//输入第一个学生的姓名

getchar();

printf("高数成绩:

\n");

scanf("%d",&p->score[0]);

printf("英语成绩:

\n");

scanf("%d",&p->score[1]);

printf("数据结构成绩:

\n");

scanf("%d",&p->score[2]);

printf("是否继续?

Y.是N(其它任意键).否");

scanf("%c",&ch);

getchar();

if(ch=='Y')

{

while(ch=='Y')

{

a=a+1;

if(a==1)

head=p;

else

q->next=p;//使p指向q的下一结点

q=p;

p=(structA*)malloc(sizeof(structA));//开辟一个新单元

printf("学号:

");

scanf("%d",&p->num);

printf("姓名:

");

scanf("%s",p->name);

getchar();

printf("高数成绩:

\n");

scanf("%d",&p->score[0]);

printf("英语成绩:

\n");

scanf("%d",&p->score[1]);

printf("数据结构成绩:

\n");

scanf("%d",&p->score[2]);

printf("是否继续?

Y.是N(其它任意键).否");

scanf("%c",&ch);

}

p->next=NULL;

q->next=p;

}

else

{

p->next=NULL;

head=p;

}

return(head);

}

/*定义学生成绩管理系统函数*/

intmain()

{

charch,filename[20];

while

(1)

{

printf("###############################################################################\n");

printf("##\n");

printf("#欢迎您使用学生成绩管理系统!

#\n");

printf("##\n");

printf("#欢迎您使用以下功能:

#\n");

printf("##\n");

printf("#A.添加B.删除#\n");

printf("##\n");

printf("#C.修改D.查找#\n");

printf("##\n");

printf("#E.保存F.退出#\n");

printf("##\n");

printf("##\n");

printf("##\n");

printf("###############################################################################\n");

printf("请您选择您所需要的功能:

");

scanf("%c",&ch);

getchar();

if(ch!

='A'&&ch!

='B'&&ch!

='C'&&ch!

='D'&&ch!

='E'&&ch!

='F')

printf("对不起,您输入有误,请重试。

\n");

else

{

if(ch=='F')

{

END();

return0;

}//退出使用

else

printf("请您输入所用文件名:

");

scanf("%s",filename);

getchar();

switch(ch)

{

case'A':

Aadd(filename);break;//选择学生成绩添加功能

case'B':

Adel(filename);break;//选择学生成绩删除功能

case'C':

Achange(filename);break;//选择学生成绩修改功能

case'D':

Asearch(filename);break;//选择学生成绩查找功能

case'E':

Asave(Acreate(),filename);break;//选择学生成绩保存功能

}

}

}

}

/*定义学生成绩管理系统文件保存函数*/

voidAsave(structA*pt,charfilename[20])

{

FILE*fp;

if((fp=fopen(filename,"a"))==NULL)//新建并打开文件

{

printf("对不起,无法打开此文件\n");//无法打开此文件

exit(0);

}

while(pt!

=NULL)//如果存在就输入文件保存

{

if(fwrite(pt,sizeof(structA),1,fp)!

=1)

printf("对不起,文件输入错误\n");

pt=pt->next;//使pt指向下一个结点

}

fclose(fp);//关闭fp所指的文件

}

/*定义学生成绩管理系统添加函数*/

voidAadd(charfilename[20])

{

structA*pt,*p;

pt=Acreate();

FILE*fp;

if((fp=fopen(filename,"ab"))==NULL)//打开文件出错

fp=fopen(filename,"wb");//如果原文件不存在,就新建

while(pt!

=NULL)//如果存在就输入文件保存

{

if(fwrite(pt,sizeof(structA),1,fp)!

=1)

printf("对不起,文件输入错误\n");

pt=pt->next;

}

fclose(fp);//关闭文件

p=Aread(filename);

free(p);//释放P所指的内存区

Asave(pt,filename);

}

/*定义学生成绩管理系统文件输出函数*/

structA*Aread(charfilename[20])

{

FILE*fp;//定义一个指向文件的指针变量fp

inti;

structA*head,*p,*q;

head=NULL;//头指针为空地址

if((fp=fopen(filename,"rb"))==NULL)//打开文件出错

{

printf("对不起,无法打开此文件\n");//无法打开此文件

exit(0);

}

printf("当前系统学生成绩内容如下:

\n");

p=q=(structA*)malloc(sizeof(structA));//把p和q分配为与structA相同字节的存储区

fread(p,sizeof(structA),1,fp);//从fp指向的文件读入一组数据

for(i=0;!

feof(fp);i++)//如果未遇到fp文件的结束标志

{

printf("学号:

%-20d姓名:

%-20s高数成绩:

%-10d英语成绩:

%-10d数据结构成绩:

%-10d\n",p->num,p->name,p->score[0],p->score[1],p->score[2]);

q=p;

p=(structA*)malloc(sizeof(structA));//开辟相同字节的存储区

fread(p,sizeof(structA),1,fp);//从fp指向的文件中再次读入一组数据

q->next=p;//使p指向下一个结点

if(i==0)head=q;//使q的地址成为头指针

i++;

}

q->next=NULL;//使q的下一个结点为空地址

return(head);

}

/*定义学生成绩管理系统删除功能函数*/

voidAdel(charfilename[20])

{

charch,name[20];

inta;

structA*pt,*p,*q,*head;

inti=0,flag=0;//判断是非的标志

do

{

i=0;

head=NULL;//头指针为空地址

p=q=(structA*)malloc(sizeof(structA));//开辟p和q空间的起始地址

p=Aread(filename);

head=p;//p的空间地址为头指针

printf("请您选择:

A.按学号操作B.按姓名操作C.按高数成绩操作D.按英语成绩操作E.按数据结构成绩操作");

scanf("%c",&ch);//键盘输入选择键

getchar();

switch(ch)

{

case'A':

{

printf("请输入您要删除学生的学号:

");//按学号操作

scanf("%d",&a);//输入学生学号

while(p!

=NULL)//指针p的地址不为空地址

{

if(a==p->num)//若指针p指向的学号与a相等

{

flag=1;//继续循环

if(i==0)

{

head=p->next;//p的下一个结点的地址为头指针

p=head;

}

else

{

q->next=p->next;//使p的下一个结点指向q的下一个结点

free(p);//释放p所指的内存区

p=q->next;//使q的下一个结点指向p

}

}

else

{

q=p;//指针变量p的地址赋予指针p

p=q->next;//使q的下一个结点指向p

}

i++;

}

if(flag==0)

printf("对不起,您要查找的内容不存在。

\n");

else

{

Asave(head,filename);//存储此文件

flag=0;//跳出循环

}

}

break;//提前终止循环,跳出switch语句

case'B':

{

printf("请输入您要删除学生的姓名:

");//按姓名操作

scanf("%s",name);

getchar();

while(p!

=NULL)//指针p的地址不为空地址

{

if(strcmp(p->name,name)==0)//比较指针p指向的成员姓名与输入姓名

{

flag=1;

if(i==0)

{

head=p->next;//p的下一个结点赋予头指针

p=head;//再将头指针赋予指针变量p

}

else

{

q->next=p->next;//使p的下一个结点指向q的下一个结点

free(p);//释放p所指的内存区

p=q->next;//使q的下一个结点指向p

}

}

else

{

q=p;

p=q->next;//使q的下一个结点指向p

}

i++;

}

if(flag==0)

{

printf("对不起,您要查找的内容不存在。

\n");

}

else

{

Asave(head,filename);//存储此头文件

flag=0;

}

}

break;//提前终止循环,跳出switch语句

case'C':

{

printf("请输入您要删除学生的高数成绩:

");//按高数成绩操作

scanf("%d",&a);

while(p!

=NULL)//指针p的地址不为空地址

{

if(a==p->score[0])//若输入成绩a等于p指向的高数成绩

{

flag=1;

if(i==0)

{

head=p->next;//使p下一个结点成为头指针

p=head;//再将头指针赋予指针变量p

}

else

{

q->next=p->next;//使p的下一个结点指向q的下一个结点

free(p);//释放p所指的内存区

p=q->next;//使q的下一个结点指向p

}

}

else

{

q=p;

p=q->next;//使q的下一个结点指向p

}

i++;

}

if(flag==0)

{

printf("对不起,您要查找的内容不存在。

\n");

}

else

{

Asave(head,filename);//存储此文件

flag=0;

}

}

break;//提前终止循环,跳出switch语句

case'D':

{

printf("请输入您要删除学生的英语成绩:

");//按英语成绩操作

scanf("%d",&a);

while(p!

=NULL)//当指针p的地址不为空地址时

{

if(a==p->score[1])//若输入成绩a等于p指向的英语成绩

{

flag=1;

if(i==0)

{

head=p->next;//使p指向的下一个结点引为头指针

p=head;//将头指针赋予指针p

}

else

{

q->next=p->next;//使p的下一个结点指向q的下一个结点

free(p);//释放p所指的内存区

p=q->next;}//使q的下一个结点指向p

}

else

{

q=p;//指针p的地址赋予指针q

p=q->next;//使q的下一个结点指向p

}

i++;

}

if(flag==0)

{

printf("对不起,您要查找的内容不存在。

\n");

}

else

{

Asave(head,filename);//存储此文件

flag=0;

}

}

break;//提前终止循环,跳出switch语句

case'E':

{

printf("请输入您要删除学生的数据结构成绩:

");//按数据结构成绩操作

scanf("%d",a);

while(p!

=NULL)//当指针p的地址不为空地址时

{

if(a==p->score[2])//若输入成绩a等于p指向的数据结构成绩

{

flag=1;

if(i==0)

{

head=p->next;//将p的下一个结点引为头指针

p=head;//再将头指针赋予指针变量p

}

else

{

q->next=p->next;//使p的下一个结点指向q的下一个结点

free(p);//释放p所指的内存区

p=q->next;//使q的下一个结点指向p

}

}

else

{

q=p;//将指针p的地址赋予指针q的地址

p=q->next;//使q的下一个结点指向p

}

i++;

}

if(flag==0)

{

printf("对不起,您要查找的内容不存在。

\n");

}

else

{

Asave(head,filename);//存储此文件

flag=0;

}

}

break;//提前终止循环,跳出switch语句

default:

//若上面所有条件都不成立,则运行以下程序

printf("对不起,您输入有误。

\n");

}

printf("是否继续?

Y.是N(其它任意键).否\n");

scanf("%c",&ch);

getchar();

}

while(ch=='Y');//当选择Y时

pt=Aread(filename);//输出文件pt

free(pt);//释放pt所指的存储区

}

/*定义学生成绩管理系统修改功能函数*/

voidAchange(charfilename[20])

{

charch,name[20];

inta;

structA*pt,*p,*head;

intflag;

do

{

flag=0;

p=(structA*)malloc(sizeof(structA));

p=Aread(filename);

head=p;

printf("请您选择:

A.按学号操作B.按姓名操作C.按高数成绩操作D.按英语成绩操作E.按数据结构成绩操作");

scanf("%c",&ch);

getchar();

switch(ch)

{

case'A':

{

printf("请输入您要修改学生的学号:

");//按学号操作

scanf("%d",&a);

getchar();

while(p!

=NULL)

{

if(a==p->num)

{

flag=1;

printf("学生原始信息:

\n");

printf("学号:

%d\n",p->num);

printf("姓名:

%s\n",p->name);

printf("高数成绩:

%d\n",p->score[0]);

printf("英语成绩:

%d\n",p->score[1]);

printf("数据结构成绩:

%d\n",p->score[2]);

printf("是否修改学号?

Y.是N(其它任意键).否");

scanf("%c",&ch);

getchar();

if(ch=='Y')

{

printf("请输入修改后的学号:

");

scanf("%d",&p->num);

getchar();

}

printf("是否修改姓名?

Y.是N(其它任意键).否");

scanf("%c",&ch);

getchar();

if(ch=='Y')

{

printf("请输入修改后的姓名:

");

scanf("%s",&p->name);

getchar();

}

printf("是否修改高数成绩?

Y.是N(其它任意键).否");

scanf("%c",&ch);

getchar();

if(ch=='Y')

{

printf("请输入修改后高数成绩:

");

scanf("%d",&p->score[0]);

}

printf("是否修改英语成绩?

Y.是N(其它任意键).否");

scanf("%c",&ch);

getchar();

if(ch=='Y')

{

printf("请输入修改后的英语成绩:

");

scanf("%d",&p->score[1]);

}

printf

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1