成绩查询控制台.docx
《成绩查询控制台.docx》由会员分享,可在线阅读,更多相关《成绩查询控制台.docx(12页珍藏版)》请在冰点文库上搜索。
成绩查询控制台
/*
Author:
北骠将军
描述:
编制一个C语言成绩记录簿,每个学生信息包括:
学号、姓名、C语言成绩。
具体功能:
()创建信息链表并以磁盘文件保存;
()读取磁盘文件并显示输出所有学生的成绩;
()按学号或姓名查询成绩;
()添加成绩记录;
()修改指定姓名或学号的学生的成绩并可存盘;
()显示输出分以下、~79、~89、分以上各分数段的学生信息(可选项)。
*/
#include
#include
#include
#include
#include
#include
usingnamespacestd;
typedefstructStudent
{
Student*next;
stringstu_Num;
stringstu_Name;
stringstu_Grade;
}Student;
classHomeWork
{
private:
stringstr;//全局变量便于操作
Student*s,*first;
public:
intgetNum(stringstr);
voidinput(FILE*fp);
Student*createList(Student**s,FILE*fp);
voidprintList(Student*first,intindex,stringrank);//输出
voidprintGrade(Student*first,stringname,intx);//按照姓名或者学号输出
voidaddgrade(Student*first);//添加学生考试信息
stringmodifystr();
HomeWork(stringstr,Student*s,Student*first);
voidmodify(Student*first,stringname,intindex,FILE*fp);
};
stringHomeWork:
:
modifystr()
{
stringtemp;
cin>>temp;
if(temp!
="0")
str=temp;
returntemp;
}
HomeWork:
:
HomeWork(stringstr,Student*s,Student*first){
this->str=str;
this->s=s;
this->first=first;
}
intHomeWork:
:
getNum(stringstr)//获得分数
{
intsum=0;
for(inti=0;i{
sum=(str[i]-'0')+10*sum;
}
returnsum;
}
voidHomeWork:
:
input(FILE*fp)//二进制输入
{
for(inti=0;i{
fputc(str[i],fp);
}
fputc('\n',fp);//添加换行符以便于检索
}
Student*HomeWork:
:
createList(Student**s,FILE*fp)//创建链表
{
*s=newStudent[sizeofStudent];
Student*first=*s;
Student*stemp=newStudent[sizeofStudent];
inti=0;
charch[30];//最大每次读取字符
while(fgets(ch,30,fp)!
=NULL)
{
i++;
str=ch;
stringstrtemp=str.substr(0,str.length()-1);
if(i%3==1)
stemp->stu_Name=strtemp;
elseif(i%3==2)
stemp->stu_Num=strtemp;
else
{
stemp->stu_Grade=strtemp;//创建当前节点
(*s)->next=stemp;
*s=stemp;
stemp=newStudent[sizeofStudent];
}
}
(*s)->next=NULL;//为指针值空便于检索
first->stu_Grade="100";
first->stu_Name="Author";
first->stu_Num="110511309";
returnfirst;
}
voidHomeWork:
:
printList(Student*first,intindex,stringrank)//输出
{
inti=0;
Student*ss=first->next;
if(index==1)
while(ss!
=NULL)
{
i++;
if(i==1)cout<<"姓名\t"<<"学号\t"<<"分数\t"<cout<stu_Name<<"\t"<stu_Num<<"\t"<stu_Grade<ss=ss->next;
}
if(index==2)
{
while(ss!
=NULL)
{
intgrade=getNum(ss->stu_Grade);
if(pare("D")==0&&grade/10<6)//一次排名
{
i++;
if(i==1)cout<<"姓名\t"<<"学号\t"<<"分数
\t"<cout<stu_Name<<""<stu_Num<<""<stu_Grade<}elseif(pare("C")==0&&grade/10<8)
{
i++;
if(i==1)cout<<"姓名\t"<<"学号\t"<<"分数
\t"<cout<stu_Name<<""<stu_Num<<""<stu_Grade<}elseif(pare("B")==0&&grade/10<9)
{
i++;
if(i==1)cout<<"姓名\t"<<"学号\t"<<"分数
\t"<cout<stu_Name<<""<stu_Num<<""<stu_Grade<}elseif(pare("A")==0&&grade/10>=9)
{
i++;
if(i==1)cout<<"姓名\t"<<"学号\t"<<"分数
\t"<cout<stu_Name<<""<stu_Num<<""<stu_Grade<}
ss=ss->next;
}
//
}
}
voidHomeWork:
:
printGrade(Student*first,stringname,intx)//按照姓名或者学号输出
{
inti=0;
Student*ss=first->next;
if(x==1)
{
while(ss!
=NULL)
{
if(ss->stu_Name==name)
{
i++;
if(i==1)
cout<<"姓名\t"<<"学号\t"<<"分数\t"<cout<stu_Name<<"\t"<stu_Num<<"\t"<stu_Grade<}
ss=ss->next;
}
if(i==0)
cout<<"请仔细检查,此学生可能不存在"<}
elseif(x==2)
{
while(ss!
=NULL)
{
if(ss->stu_Num==name)
{
i++;
if(i==1)
cout<<"姓名\t"<<"学号\t"<<"分数\t"<cout<stu_Name<<"\t"<stu_Num<<"\t"<stu_Grade<}
ss=ss->next;
}
if(i==0)
cout<<"请仔细检查,此学生可能不存在"<}
}
voidHomeWork:
:
addgrade(Student*first)//添加学生考试信息
{
Student*ss=first->next;
Student*pre=NULL;
while(ss!
=NULL)
{
pre=ss;
ss=ss->next;
}
ss=newStudent[sizeofStudent];
cin>>ss->stu_Name>>ss->stu_Num>>ss->stu_Grade;
pre->next=ss;
ss->next=NULL;//尾端值空
}
voidHomeWork:
:
modify(Student*first,stringname,intindex,FILE*fp)//所有符合的项都将被修改
{
Student*ss=first->next;
if(index==1)
while(ss!
=NULL)
{
if(ss->stu_Name==name)
{
intgrade;cin>>grade;
ss->stu_Grade=grade;
}
str=ss->stu_Name;
input(fp);
str=ss->stu_Num;
input(fp);
str=ss->stu_Grade;
input(fp);
ss=ss->next;
}
elseif(index==2)
{
while(ss!
=NULL)
{
if(ss->stu_Num==name)
{
stringgrade;cin>>grade;
ss->stu_Grade=grade;
}
str=ss->stu_Name;
input(fp);
str=ss->stu_Num;
input(fp);
str=ss->stu_Grade;
cout<input(fp);
ss=ss->next;
}
}
}
intmain()
{
stringstr="";//全局变量便于操作
FILE*fp=NULL;
Student*s,*first;
s=first=NULL;
HomeWorkhw(str,s,first);
cout<<"欢迎访问成绩查询系统:
\t作者:
beipiaojiangjun\tQQ528410728"<charindex;
cout<<"请输入您要选择的功能:
"<cout<<"1、创建学生成绩表\t"<cout<<"2、查看当前学生的成绩\t"<cout<<"3、按姓名查找\t"<cout<<"4、按照学号查找\t"<cout<<"5、添加学生成绩\t"<cout<<"6、按学号修改学生成绩\t"<cout<<"7、按照姓名修改学生成绩\t"<cout<<"8查询各成绩段学生成绩"<while(cin>>index)
{
stringname,num,rank;
if(!
(index>='1'&&index<='8'))
{
cout<<"不存在的功能项"<continue;
}
switch(index)
{
case'1':
cout<<"学生信息正在录入,以结束本次输入"<while(hw.modifystr()!
="0")
{
fp=fopen("test.txt","ab+");
hw.input(fp);
fclose(fp);
}
break;
case'2':
fp=fopen("test.txt","ab+");
first=hw.createList(&s,fp);
hw.printList(first,1,"");
fclose(fp);
break;
case'3':
fp=fopen("test.txt","ab+");
cout<<"请输入姓名:
"<cin>>name;
first=hw.createList(&s,fp);
hw.printGrade(first,name,1);
fclose(fp);
case'4':
fp=fopen("test.txt","ab+");
cout<<"请输入学号:
"<cin>>num;
first=hw.createList(&s,fp);
hw.printGrade(first,num,2);
fclose(fp);
break;
case'5':
cout<<"学生信息正在录入,以结束本次输入"<while(cin>>str&&str!
="0")
{
fp=fopen("test.txt","ab+");
hw.input(fp);
fclose(fp);
}
break;
case'6':
cin>>num;
fp=fopen("test.txt","ab+");
first=hw.createList(&s,fp);
fclose(fp);
fp=fopen("test.txt","wb+");
hw.modify(first,num,2,fp);
fclose(fp);
break;
case'7':
cin>>name;
fp=fopen("test.txt","ab+");
first=hw.createList(&s,fp);
fclose(fp);
fp=fopen("test.txt","wb+");
hw.modify(first,name,1,fp);
fclose(fp);
case'8':
cout<<"请输入级别:
\tA:
90分及以上
\tB:
80-89\tC:
60-79\tD:
低于"<cin>>rank;
if(pare("A")||pare("B")||pare("C")||pare("D"))
{
fp=fopen("test.txt","ab+");
first=hw.createList(&s,fp);
hw.printList(first,2,rank);
fclose(fp);
}
break;
default:
break;
}
}
system("pause");
return0;
}