学生信息管理系统C++.docx
《学生信息管理系统C++.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统C++.docx(27页珍藏版)》请在冰豆网上搜索。
学生信息管理系统C++
【学生成绩管理】
实现功能:
输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、排序、索引、分类合计、退出。
能实现对学生信息的简单管理。
具体要求:
建立一个4个学生的信息登记表,每个学生的信息包括:
学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。
程序运行时显示一个简单的菜单,例如:
(1):
信息输入(INPUT)
(2):
总分统计(COUNT)
(3):
总分排序(SORT)
(4):
查询(QUERY)
其中:
(1):
对4个学生的信息进行输入;
(2):
对每个学生的3门课程统计总分;
(3):
对4个学生的总分按降序排序并显示出来;
(4):
查询输入一个学号后,显示出该学生的有关信息;
用的大一做的系统,由保存数据结构的object.cpp主函数main.cpp方法头文件use.h组成
Use.h
#ifndefUSE_H_INCLUDED
#defineUSE_H_INCLUDED
#endif//USE_H_INCLUDED
#include
#include
voidMeau()
{
printf("-------欢迎使用学生信息管理系统-------\n--------------------------------------\n输入指令完成命令:
\n1.打印信息\n2.插入新信息\n3.删除学生信息\n4.查找学生\n5.更改学生信息\n6.排序显示学生信息\n7.文件另存为\ne.保存并退出\n--------------------------------------\n请输入指令\n");
}
voidZhuangBSave()
{
intT=2;
while(T--)
{
system("cls");
Meau();
Sleep(500);
printf("Saveing.\r");
Sleep(500);
printf("Saveing..\r");
Sleep(500);
printf("Saveing...\r");
Sleep(500);
printf("Saveing....\r");
Sleep(500);
printf("Saveing.....\r");
}
}
voidZhuangBExit()
{
intc=6;
while(c--)
{
printf("Saved!
Andheprogramwillbeclosein%dsecond.\r",c);
Sleep(1000);
}
}
Object.h
#include
#include
#include
#include
structscore
{
longlongnum;
chara[10];
intch;
intma;
inten;
intc;
intph;
intsum;
structscore*next;
};
voidswap(score*p1,score*p2)
{
intt;
t=p1->num;
p1->num=p2->num;
p2->num=t;
t=p1->ch;
p1->ch=p2->ch;
p2->ch=t;
t=p1->ma;
p1->ma=p2->ma;
p2->ma=t;
t=p1->en;
p1->en=p2->en;
p2->en=t;
t=p1->c;
p1->c=p2->c;
p2->c=t;
t=p1->ph;
p1->ph=p2->ph;
p2->ph=t;
charc[10];
strcpy(c,p1->a);
strcpy(p1->a,p2->a);
strcpy(p2->a,c);
}
boolcmp0(score*p1,score*p2)
{
returnp1->numnum;
}
boolcmp01(score*p1,score*p2)
{
if(p1->ch==p2->ch)
returnp1->numnum;
returnp1->chch;
}
boolcmp11(score*p1,score*p2)
{
if(p1->ch==p2->ch)
returnp1->numnum;
returnp1->ch>p2->ch;
}
boolcmp02(score*p1,score*p2)
{
if(p1->ma==p2->ma)
returnp1->numnum;
returnp1->mama;
}
boolcmp12(score*p1,score*p2)
{
if(p1->ma==p2->ma)
returnp1->numnum;
returnp1->ma>p2->ma;
}
boolcmp03(score*p1,score*p2)
{
if(p1->en==p2->en)
returnp1->numnum;
returnp1->enen;
}
boolcmp13(score*p1,score*p2)
{
if(p1->en==p2->en)
returnp1->numnum;
returnp1->en>p2->en;
}
boolcmp04(score*p1,score*p2)
{
if(p1->c==p2->c)
returnp1->numnum;
returnp1->cc;
}
boolcmp14(score*p1,score*p2)
{
if(p1->c==p2->c)
returnp1->numnum;
returnp1->c>p2->c;
}
boolcmp05(score*p1,score*p2)
{
if(p1->ph==p2->ph)
returnp1->numnum;
returnp1->phph;
}
boolcmp15(score*p1,score*p2)
{
if(p1->ph==p2->ph)
returnp1->numnum;
returnp1->ph>p2->ph;
}
boolcmp06(score*p1,score*p2)
{
if(p1->sum==p2->sum)
returnp1->numnum;
returnp1->sumsum;
}
boolcmp16(score*p1,score*p2)
{
if(p1->sum==p2->sum)
returnp1->numnum;
returnp1->sum>p2->sum;
}
boolcmp07(score*p1,score*p2)
{
if(strcmp(p1->a,p2->a)==1)
return1;
else
return0;
}
boolcmp17(score*p1,score*p2)
{
if(strcmp(p1->a,p2->a)==1)
return0;
else
return1;
}
voidScoreSort(structscore*head,bool(*cmp)(score*p1,score*p2))
{
structscore*p1,*p2;
for(p1=head;p1!
=NULL;p1=p1->next)
for(p2=p1->next;p2!
=NULL;p2=p2->next)
{
if((*cmp)(p1,p2))
{
swap(p1,p2);
}
}
}
voidScorePri(structscore*head)
{
//intc=0;
//system("cls");
printf("=================================================\n");
structscore*pri;
pri=head;
while(pri!
=NULL)
{
//printf("test%d\n",c++);
printf("学号:
%I64d姓名:
%s\n语文:
%d数学:
%d英语:
%d\nc语言:
%d物理:
%d\n总成绩:
%d平均成绩:
%.2lf\n=================================================\n",pri->num,pri->a,pri->ch,pri->ma,pri->en,pri->c,pri->ph,pri->sum,pri->sum/5.0);
pri=pri->next;
}
printf("End\n");
}
structscore*ScoreIns(structscore*head)
{
structscore*p1,*p2,*newl;
newl=(score*)malloc(sizeof(score));
printf("请依次输入学号,语文,数学,英语,c语言,物理成绩\n");
scanf("%I64d%d%d%d%d%d",&newl->num,&newl->ch,&newl->ma,&newl->en,&newl->c,&newl->ph);
newl->sum=newl->ch+newl->ma+newl->en+newl->c+newl->ph;
printf("输入学生姓名\n");
scanf("%s",newl->a);
if(head==NULL)
{
head=newl;
newl->next=NULL;
returnhead;
}
p1=head;
p2=p1->next;
if(newl->numnum)
{
newl->next=head;
returnnewl;
}
while(p2!
=NULL)
{
if(newl->num>p1->num&&newl->numnum)
{
newl->next=p2;
p1->next=newl;
break;
}
p1=p2;
p2=p1->next;
}
if(p2==NULL)
{
p1->next=newl;
newl->next=NULL;
}
returnhead;
}
voidZhuangBDel()
{
Sleep(500);
printf("删除中.\r");
Sleep(500);
printf("删除中..\r");
Sleep(500);
printf("删除中...\r");
Sleep(500);
printf("删除中....\r");
Sleep(500);
printf("删除中.....\r");
Sleep(500);
printf("已删除!
\n");
}
structscore*ScoreDel(structscore*head)
{
structscore*p1,*p2,*h;
longlongn=0;
intflag,flag1=0;
intord;
charn1[100],s[2];
flag=0;
printf("输入1学号查询,输入2姓名查询\n");
scanf("%d",&ord);
if(ord==1)
{
printf("请输入学号\n");
scanf("%I64d",&n);
}
elseif(ord==2)
{
printf("请输入姓名\n");
scanf("%s",n1);
}
else
{
printf("Illegalinput\n");
returnhead;
}
if(ord==1)
{
printf("您要删除的学生学号为%I64d,是否删除?
(Y/N)",n);
scanf("%s",s);
if(strcmp(s,"Y")!
=0)
returnhead;
}
if(ord==2)
{
printf("您要删除的学生姓名为%s,是否删除?
(Y/N)",n1);
scanf("%s",s);
if(strcmp(s,"Y")!
=0)
returnhead;
}
p1=head;
p2=p1->next;
if((ord==1&&p1->num==n)||(ord==2&&strcmp(p1->a,n1)==0))
{
h=p1->next;
free(p1);
flag=1;
ZhuangBDel();
returnh;
}
else
{
if(p1->next==NULL)flag1=0;
while(flag1!
=0&&p2->next!
=NULL)
{
if((ord==1&&p1->num==n)||(ord==2&&strcmp(p2->a,n1)==0))
{
p1->next=p2->next;
free(p2);
flag=1;
}
p1=p2;
p2=p1->next;
}
if(flag1!
=0&&p2->next==NULL)
{
if((ord==1&&p1->num==n)||(ord==2&&strcmp(p2->a,n1)==0))
{
p1->next=NULL;
free(p2);
flag=1;
}
}
}
if(flag==0||flag1==1)
printf("Error:
NotFound!
\n");
else
ZhuangBDel();
returnhead;
}
voidScoreSearch(structscore*head)
{
structscore*p1;
longlongn;
intflag;
flag=0;
printf("输入需要查找的学号\n");
scanf("%I64d",&n);
for(p1=head;p1!
=NULL;p1=p1->next)
{
if(p1->num==n)
{
printf("姓名:
%s\n语文成绩:
%d\n数学成绩:
%d\n英语成绩:
%d\nC语言成绩:
%d\n物理成绩:
%d\n总成绩:
%d\n平均成绩:
%.2lf\n",p1->a,p1->ch,p1->ma,p1->en,p1->c,p1->ph,p1->sum,p1->sum/5.0);
flag=1;
}
}
if(flag==0)
printf("Error:
NotFound!
\n");
}
voidScoreChange(structscore*head)
{
longlongm;
intn,a;
charb[100];
structscore*p1;
printf("请输入需要修改信息的学号\n");
scanf("%I64d",&m);
for(p1=head;p1!
=NULL;p1=p1->next)
{
if(p1->num==m)break;
}
if(p1==NULL)
{
printf("NotFound!
\n");
return;
}
printf("输入1修改语文成绩\n输入2修改数学成绩\n输入3修改英语成绩\n输入4修改c语言成绩\n输入5修改物理成绩\n输入6修改姓名\n");
scanf("%d",&a);
if(a==1)
{
printf("该成员语文成绩为%d,请输入修改值\n",p1->ch);
scanf("%d",&n);
p1->ch=n;
printf("修改成功!
\n");
}
elseif(a==2)
{
printf("该成员数学成绩为%d,请输入修改值\n",p1->ma);
scanf("%d",&n);
p1->ma=n;
printf("修改成功!
\n");
}
elseif(a==3)
{
printf("该成员英语成绩为%d,请输入修改值\n",p1->en);
scanf("%d",&n);
p1->en=n;
printf("修改成功!
\n");
}
elseif(a==4)
{
printf("该成员C语言成绩为%d,请输入修改值\n",p1->c);
scanf("%d",&n);
p1->c=n;
printf("修改成功!
\n");
}
elseif(a==5)
{
printf("该成员物理成绩为%d,请输入修改值\n",p1->ph);
scanf("%d",&n);
p1->ph=n;
printf("修改成功!
\n");
}
elseif(a==6)
{
printf("该成员姓名为%s,请输入修改值\n",p1->a);
scanf("%s",b);
strcpy(p1->a,b);
printf("修改成功!
\n");
}
else
printf("输入错误,退出修改\n");
}
voidScoreView(structscore*head)
{
inta,b;
//bool*cmp(score*p1,score*p2);
printf("输入1按语文成绩排列\n输入2按数学成绩排列\n输入3按英语成绩排列\n输入4按C语言成绩排列\n输入5按物理成绩排列\n输入6按总成绩排列\n输入7按名字排列\n");
scanf("%d",&a);
printf("输入0升序排列,输入1降序排列\n");
scanf("%d",&b);
if(a==1&&b==0)
ScoreSort(head,&cmp01);
if(a==1&&b==1)
ScoreSort(head,cmp11);
if(a==2&&b==0)
ScoreSort(head,cmp02);
if(a==2&&b==1)
ScoreSort(head,cmp12);
if(a==3&&b==0)
ScoreSort(head,cmp03);
if(a==3&&b==1)
ScoreSort(head,cmp13);
if(a==4&&b==0)
ScoreSort(head,cmp04);
if(a==4&&b==1)
ScoreSort(head,cmp14);
if(a==5&&b==0)
ScoreSort(head,cmp05);
if(a==6&&b==0)
ScoreSort(head,cmp06);
if(a==6&&b==1)
ScoreSort(head,cmp16);
if(a==7&&b==0)
ScoreSort(head,cmp07);
if(a==7&&b==1)
ScoreSort(head,cmp17);
ScorePri(head);
ScoreSort(head,cmp0);
}
voidSave(score*head,chara[])
{
FILE*fp;
score*pri=head;
fp=fopen(a,"w");
while(pri!
=NULL)
{
fprintf(fp,"%I64d%d%d%d%d%d",pri->num,pri->ch,pri->ma,pri->en,pri->c,pri->ph);
fprintf(fp,"%s",pri->a);
pri=pri->next;
}
return;
}
voidNSave(score*head)
{
chara[100],b[100],c[]="/",d[]=".txt";
printf("输入另存为的地址\n");
scanf("%s",a);
printf("输入文件名称\n");
scanf("%s",b);
strcat(a,c);
strcat(a,b);
strcat(a,d);
Save(head,a);
return;
}
structscore*Load(score*head)
{
//intc=0;
FILE*fp;
fp=fopen("E:
\\data.txt","r");
if(fp==NULL)
{
//printf("Nodata\n");
returnNULL;
}
freopen("E:
\\data.txt","r",stdin);
score*newl,*p1,*p2;
newl=(score*)malloc(sizeof(score));
while(scanf("%I64d%d%d%d%d%d",&newl->num,&newl->ch,&newl->ma,&newl->en,&newl->c,&newl->ph)!
=EOF)
{
//printf("test%d\n",c++);
newl->sum=newl->ch+newl->ma+newl->en+newl->c+newl->ph;
scanf("%s",newl->a);
if(head==NULL)
{
head=newl;
newl->next=NULL;
}
p1=head;
p2=p1->next;
if(newl->numnum)
{
newl->next=head;
head=newl;
}
while(p2!
=NULL)
{
if(newl->num>p1->num&&newl->numnum)
{
newl->next=p2;
p1->next=newl;
}
p1=p2;
p2=p1->next;
}
if(p2==NULL)
{
p1->next=newl;
newl->next=NULL;
}
newl=(score*)malloc(sizeof(sc