学生学籍管理系统 用C++编写

附录1学生学籍管理系统的功能要求要求完成以下功能:1)能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。2)能够将指定的信息从文件中删除。3)能够按编号、姓名对学生... 附录1 学生学籍管理系统的功能要求
要求完成以下功能:
1)能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。
2)能够将指定的信息从文件中删除。
3)能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上。
4)可以统计全部学生的总成绩,及其在班上的排名。
5)能够统计各科的平均成绩及及格率。
6)要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入。
7)如果检索不到相应的信息应提示用户。

ps;小妹财富不足,见谅见谅,抱歉实在
展开
 我来答
Hfuu_Francis
2010-06-08
知道答主
回答量:5
采纳率:0%
帮助的人:0
展开全部
一时半会也不能写出一模一样的程序了,给个程序让你参考吧!希望对你有帮助!
#include <iomanip.h>
#include <stdio.h>
void menu();//函数声明******主菜单函数
void help();
void build();
void add();
void del();
void save();
void load();
void print();
void print(int l, int *p);
void print1(int l, int *p);
void mend();
void score();
void all();
int findnum(int *r);
int findname(int *r);
void countout();
void countin();
struct student
{
int number;
char name[20];
double math,e,c,avg,all;
};
student people[100];
static int n;
char file[30],ch;
void main()
{
system("color 1A");
cout<<"\t\t\t欢迎使用学生成绩管理系统"<<endl;
menu();}
void menu()
{

cout<<endl<<endl;
cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓";
cout<<"┃**************** ☆ 学 生 成 绩 管 理 系 统 ☆ ****************** ┃";
cout<<"┃********** ★★★★★ ★★★★★★★ ★★★★★ *********** ┃";
cout<<"┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫";
cout<<"┃****************★ ☆ 1.帮助 ☆ ★***************┃";
cout<<"┃****************★ ☆ 2.输入数据并存档 ☆ ★***************┃";
cout<<"┃****************★ ☆ 3.添加学生 ☆ ★***************┃";
cout<<"┃****************★ ☆ 4.删除学生 ☆ ★***************┃";
cout<<"┃****************★ ☆ 5.修改学生资料 ☆ ★***************┃";
cout<<"┃****************★ ☆ 6.成绩统计 ☆ ★***************┃";
cout<<"┃****************★ ☆ 7.总成绩统计 ☆ ★***************┃";
cout<<"┃****************★ ☆ 8.储存学生成绩 ☆ ★***************┃";
cout<<"┃****************★ ☆ 9.安全退出系统 ☆ ★***************┃";
cout<<"┃****************★ ☆ 0.查看全部 ☆ ★***************┃";
cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"
<<"****************作者: 09计本三班 赵天武 QQ:469536761************************"<<endl;
char a;
cout<<endl<<"\t\t\t 请输入选项:";
cin>>a;
cout<<endl;
2. switch(a)
{
case '1':help();break;
case '2':build();break;
case '3':add();break;
case '4':del();break;
case '5':mend();break;
case '6':score();break;
case '7':all();break;
case '8':save();break;
case '9':cout<<"退出程序"<<endl;break;
case '0'{
print();
cout<<"任意键返回。"<<endl;
getchar();
system("cls");
menu();
};break;
default:cout<<"输入错误"<<endl;
cout<<"回车键返回。"<<endl;
getchar();
system("cls");
menu();
}
}
void help()
{

system("cls");
cout<<" 此系统是应老师所布置的作业编制而成,该系统具有存贮学生数据,\n";
cout<<" 学号、姓名查询,列出学生成绩和统计功能。使用方法:系统输\n";
cout<<" 入数据后,将在当前目录中建立一个名为 stu.dat文件,用于保存\n";
cout<<" 输入的数据。学号输入只能用数字输入,并且学号只能是10位。姓\n";
cout<<" 名输入符合中国人的姓名,只能用中文,且最长为5个汉字。"<<endl<<endl<<endl;
cout<<"回车键返回!!"<<endl;
getchar();
system("cls");
menu();

}
void build() //新建
{
fstream outf;
cout<<"输入文件名(包括扩展名):";cin>>file;cout<<endl;
cout<<"请问初始化学生的个数:";cin>>n;cout<<endl;
for(int i=0;i<n;i++)
{
cout<<"\t\t\t学号:"; cin>>people[i].number; cout<<endl;
cout<<"\t\t\t姓名:"; cin>>people[i].name; cout<<endl;
cout<<"\t\t\t数学:"; cin>>people[i].math; cout<<endl;
cout<<"\t\t\t英语:"; cin>>people[i].e; cout<<endl;
cout<<"\t\t\tC++ :"; cin>>people[i].c; cout<<endl;
}
cout<<n<<endl;
save();
}
void save() //保存
{
system("cls");
fstream outf;
outf.open(file,ios::out|ios::binary);
if(!outf)
{
cout<<"文件存储失败;"<<endl;
abort();
}
for(int i=0;i<n;i++)
outf.write((char *)&people[i],sizeof(people[i]));
outf.close();
cout<<"保存完毕"<<endl;
cout<<"按任意键返回主菜单。";
cin.get();
system("cls");

menu();
}
void load() //读取文件
{
n=0;
loop:
cout<<"输入文件名(包括扩展名):";cin>>file;cout<<endl;
fstream inf;
inf.open(file,ios::in|ios::binary|ios::nocreate);
if (!inf)
{
cout<<"载入文件失败"<<endl;
goto loop;
}
else cout<<"成功读取文件!"<<endl;
while(!inf.eof())
{inf.read((char *)&people[n],sizeof(people[n]));n=n+1;}
cout<<n-2<<endl;
cout<<"学生成绩汇总表:"<<endl;
inf.close();
cout<<"确定返回主菜单。";
getchar();
system("cls");
menu();
}
void add() //添加
{
char ch;
int i=n;
cout<<n<<endl;
loop:
system("cls");
cout<<"学号:"; cin>>people[n].number; cout<<endl;
cout<<"姓名:"; cin>>people[n].name; cout<<endl;
cout<<"数学:"; cin>>people[n].math; cout<<endl;
cout<<"英语:"; cin>>people[n].e; cout<<endl;
cout<<"C++ :"; cin>>people[n].c; cout<<endl;
n=n+1;cout<<n<<endl;
cout<<endl<<"\t"<<"继续添加?(y/n):";cin>>ch;
if(ch=='y') goto loop;
cout<<"文件尚未保存,保存吗?(y/n)";cin>>ch;
if(ch=='y')
{
fstream outf;
outf.open(file,ios::out|ios::binary|ios::ate);
if(!outf)
{
cout<<"文件存储失败;"<<endl;
abort();
}
for(i;i<n;i++)
outf.write((char *)&people[i],sizeof(people[i]));
outf.close();
cout<<"保存完毕"<<endl;
}
getchar();
system("cls");
menu();
}
void del() //删除
{
if(n==0)
cout<<"无学生档案"<<n<<endl;
else
{
int findnum(int *p);
int findname(int *p);
int a,k,remember[20];
char ch;
loop:
cout<<"\t\t"<<"输入1.学号查询"<<endl;
cout<<"\t\t"<<"输入2.以姓名查询"<<endl<<endl;
cout<<"\t\t"<<"输入3.返回"<<endl;
cout<<"\t\t\t\t输入选项:";cin>>a;
if(a==1)
{
k=findnum(remember);
if (k==0) {cout<<"无此人"<<endl;goto loop;}
else print1(k,remember);
}
else if(a==2)
{
k=findname(remember);
if (k==0){ cout<<"无此人"<<endl;goto loop;}
else print1(k,remember);
}
else if(a==3) {system("cls");menu(); }
else {cout<<"错误选项!";goto loop;}
cout<<endl<<"是否删除?(y/n)";
cin>>ch;
if(ch=='y')
{
for(int j=0;j<k;j++) //print(n,remember);
{
for(int t=remember[j];t<n;t++)
{ if(remember[j]==n-1) break;
else
people[t]=people[t+1]; //经典
}
n--;cout<<k<<" "<<n<<" "<<remember[0]<<endl; //
}
fstream outf;
outf.open(file,ios::out|ios::binary);
if(!outf)
{
cout<<"文件存储失败;"<<endl;
abort();
}
for(int i=0;i<n-k;i++)
outf.write((char *)&people[i],sizeof(people[i]));
outf.close();
cout<<"删除完毕,文件已保存。"<<endl;
getchar();
system("cls");
menu();
}
else {cout<<"删除完毕,文件已保存。"<<endl;
cout<<"\t\t\t\t\t\t\t\t\t\t确定";
getchar();
system("cls");menu();}
}
}
void mend() //修改****************************************************************************
{
if(n==0)
cout<<"无学生资料"<<n<<endl;
else
{
int findnum(int *p);
int findname(int *p);
int a,k,remember[20];
loop:
cout<<"\t"<<"1.以学号查询"<<endl;
cout<<"\t"<<"2.以姓名查询"<<endl<<endl;
cout<<"\t"<<"3.返回"<<endl;
cout<<"输入选项:";cin>>a;
if(a==1)
{
k=findnum(remember);
if (k==0) cout<<"无此人"<<endl; else print1(k,remember);
}
else if(a==2)
{
k=findname(remember);
if (k==0) cout<<"无此人"<<endl; else print1(k,remember);
}
else if(a==3){system("cls"); menu();}
else {cout<<"错误选项!";goto loop;}
cout<<"学生资料修改输入:===>>"<<endl;
for(int i=0;i<k;i++)
{
cout<<"\t\t\t学号:"; cin>>people[remember[i]].number; cout<<endl;
cout<<"\t\t\t姓名:"; cin>>people[remember[i]].name; cout<<endl;
cout<<"\t\t\t数学:"; cin>>people[remember[i]].math;cout<<endl;
cout<<"\t\t\t英语:"; cin>>people[remember[i]].e; cout<<endl;
cout<<"C++:"; cin>>people[remember[i]].c; cout<<endl;
}
fstream outf;
outf.open(file,ios::out|ios::binary);
if(!outf)
{
cout<<"文件未存储;"<<endl;
abort();
}
for(i=0;i<n;i++)
{
if(i==k) continue;
else outf.write((char *)&people[i],sizeof(people[i]));
}
outf.close();
cout<<"学生信息修改完成。"<<endl;
}
cout<<"\t\t\t\t\t\t\t\t\t\t确定。"<<endl;
getchar();
system("cls");

menu();
}
void score() //成绩统计****************************************************************************
{
double savg[3];
int pnum[3][5],good,lgood,so,ok,notok; //3 科 1~5 优秀,良好,中,及格,不及格 的人数
double sum[3]={0,0,0};
for(int j=0;j<n;j++) {sum[0]+=people[j].math;sum[1]+=people[j].e;sum[2]+=people[j].c;} //单科总成绩****************************************************************************
for(int i=0;i<3;i++) savg[i]=sum[i]/n; //科目平均****************************************************************************
for(i=0;i<5;i++)
{
good=0;lgood=0;so=0;ok=0;notok=0;
for(int j=0;j<n;j++)
{
if (people[j].math>=90) good++;else if(people[j].math>=80) lgood++;else if(people[j].math>=70) so++;else
if (people[j].math>=60) ok++;else notok++;
}
pnum[0][0]=good;pnum[0][1]=lgood;pnum[0][2]=so;pnum[0][3]=ok;pnum[0][4]=notok;
good=0;lgood=0;so=0;ok=0;notok=0;
for(j=0;j<n;j++)
{
if (people[j].e>=90) good++;else if(people[j].e>=80) lgood++;else if(people[j].e>=70) so++;else
if (people[j].e>=60) ok++;else notok++;
}
pnum[1][0]=good;pnum[1][1]=lgood;pnum[1][2]=so;pnum[1][3]=ok;pnum[1][4]=notok;
good=0;lgood=0;so=0;ok=0;notok=0;
for(j=0;j<n;j++)
{
if (people[j].c>=90) good++;else if(people[j].c>=80) lgood++;else if(people[j].c>=70) so++;else
if (people[j].c>=60) ok++;else notok++;
}
pnum[2][0]=good;pnum[2][1]=lgood;pnum[2][2]=so;pnum[2][3]=ok;pnum[2][4]=notok;
}
cout<<"┌————┬—————┬————┬————┬————┬————┬————┐"<<endl;
cout<<"│ 科目 │ 平均成绩 │ 优秀 │ 良好 │ 中等 │ 及格 │ 不及格 │"<<endl;
cout<<"├————┼—————┼————┼————┼————┼————┼————┤"<<endl;
cout<<"│ 数学 │"<<setw(5)<<savg[0]<<" │"<<setw(5)<<pnum[0][0]<<" │"<<setw(5)<<pnum[0][1]<< " │"
<<setw(5)<<pnum[0][2]<<" │"<<setw(5)<<pnum[0][3]<<" │"<<setw(5)<<pnum[0][4]<<" │"<<endl;
cout<<"├————┼—————┼————┼————┼————┼————┼————┤"<<endl;
cout<<"│ 英语 │"<<setw(5)<<savg[1]<<" │"<<setw(5)<<pnum[1][0]<<" │"<<setw(5)<<pnum[1][1]<< " │"
<<setw(5)<<pnum[1][2]<<" │"<<setw(5)<<pnum[1][3]<<" │"<<setw(5)<<pnum[1][4]<<" │"<<endl;
cout<<"├————┼—————┼————┼————┼————┼————┼————┤"<<endl;
cout<<"│ C++ │"<<setw(5)<<savg[2]<<" │"<<setw(5)<<pnum[2][0]<<" │"<<setw(5)<<pnum[2][1]<< " │"
<<setw(5)<<pnum[2][2]<<" │"<<setw(5)<<pnum[2][3]<<" │"<<setw(5)<<pnum[2][4]<<" │"<<endl;
cout<<"└————┴—————┴————┴————┴————┴————┴————┘"<<endl;
cout<<"比例(%)"<<endl;
cout<<"┌————┬—————┬————┬————┬————┬————┬————┐"<<endl;
cout<<"│ 科目 │ 平均成绩 │ 优秀 │ 良好 │ 中等 │ 及格 │ 不及格 │"<<endl;
cout<<"├————┼—————┼————┼————┼————┼————┼————┤"<<endl;
cout<<"│ 数学 │"<<setw(5)<<savg[0]<<" │"<<setw(5)<<pnum[0][0]/n*100<<" │"<<setw(5)<<pnum[0][1]/n*100<< " │"
<<setw(5)<<pnum[0][2]/n*100<<" │"<<setw(5)<<pnum[0][3]/n*100<<" │"<<setw(5)<<pnum[0][4]/n*100<<" │"<<endl;
cout<<"├————┼—————┼————┼————┼————┼————┼————┤"<<endl;
cout<<"│ 英语 │"<<setw(5)<<savg[1]<<" │"<<setw(5)<<pnum[1][0]/n*100<<" │"<<setw(5)<<pnum[1][1]/n*100<< " │"
<<setw(5)<<pnum[1][2]/n*100<<" │"<<setw(5)<<pnum[1][3]/n*100<<" │"<<setw(5)<<pnum[1][4]/n*100<<" │"<<endl;
cout<<"├————┼—————┼————┼————┼————┼————┼————┤"<<endl;
cout<<"│ C++ │"<<setw(5)<<savg[2]<<" │"<<setw(5)<<pnum[2][0]/n*100<<" │"<<setw(5)<<pnum[2][1]/n*100<< " │"
<<setw(5)<<pnum[2][2]/n*100<<" │"<<setw(5)<<pnum[2][3]/n*100<<" │"<<setw(5)<<pnum[2][4]/n*100<<" │"<<endl;
cout<<"└————┴—————┴————┴————┴————┴————┴————┘"<<endl;
getchar();
system("cls");
menu();
}
void all() //总成绩统计****************************************************************************
{
int a[100],flag;
if (n>=1)
{
for(int j=0;j<n;j++) //单人成绩相加****************************************************************************
{
people[j].all=people[j].math+people[j].e+people[j].c;
people[j].avg=people[j].all/3;
}
for(j=0;j<n;j++)
{
flag=0;
for(int s=0;s<n;s++)
{
if (people[j].all<people[s].all) flag++;
}
a[j]=flag;
}

system("cls");
cout<<"┌—————┬—————┬——————┬——————┬—————┐"<<endl;
cout<<"│ 排名 │ 学号 │ 姓名 │ 平均分 │ 总成绩 │"<<endl;
cout<<"├—————┼—————┼——————┼——————┼—————┤"<<endl;
for(int i=0;i<n;i++)
{
cout<<"│ "<<setw(3)<<i+1
<<" │ "<<setw(5)<<people[*(a+i)].number
<<" │"<<setw(5)<<people[*(a+i)].name
<<" │"<<setw(5)<<people[*(a+i)].avg
<<" │"<<setw(5)<<people[*(a+i)].all
<<" │"<<endl;
if(i==n-1) break;
cout<<"├—————┼—————┼——————┼——————┼—————┤"<<endl;
}
cout<<"└—————┴—————┴——————┴——————┴—————┘"<<endl;
}
else cout<<"错误,或无学生资料."<<endl;
cout<<"\t\t\t\t\t\t\t\t\t\t确定。"<<endl;
getchar();
system("cls");
menu();
}

void countout()//个数记录**********************************************************************************************************************
{
fstream out;
out.open("F:\\count.dat",ios::out);
if(!out){cout<<"count error"<<endl;abort();}
else out<<n<<endl;
out.close();
}
void countin()//个数读取****************************************************************************
{
fstream in;
in.open("F:\\count.dat",ios::in);
if(!in){cout<<"in error"<<endl;abort();}
in>>n;
in.close();
}
void print(int l,int *p) //输出删除后所剩学生的信息****************************************************************************
{
if(l==0) cout<<"无学生资料."<<endl;
int m(0);
cout<<"┌—————┬—————┬——————┬——————┬—————┐"<<endl;
cout<<"│ 学号 │ 姓名 │ 数学 │ 英语 │ C++ │"<<endl;
cout<<"├—————┼—————┼——————┼——————┼—————┤"<<endl;
for(int i=0;i<l;i++)
{
if(i==*(p+m)) {m++;continue;}
cout<<"│ "<<setw(5)<<people[i].number
<<" │ "<<setw(5)<<people[i].name
<<" │"<<setw(5)<<people[i].math
<<" │"<<setw(5)<<people[i].e
<<" │"<<setw(5)<<people[i].c
<<" │"<<endl;
if(i==l-2) break;
cout<<"├—————┼—————┼——————┼——————┼—————┤"<<endl;
}
cout<<"└—————┴—————┴——————┴——————┴—————┘"<<endl;
}
void print() //通用查看学生信息
{
if (n==0) cout<<"无学生资料."<<endl;
cout<<"┌—————┬—————┬——————┬——————┬—————┐"<<endl;
cout<<"│ 学号 │ 姓名 │ 数学 │ 英语 │ C++ │"<<endl;
cout<<"├—————┼—————┼——————┼——————┼—————┤"<<endl;
for(int i=1;i<n+1;i++)
{
cout<<"│"<<setw(5)<<people[i-1].number
<<" │"<<setw(5)<<people[i-1].name
<<" │ "<<setw(5)<<people[i-1].math
<<" │"<<setw(5)<<people[i-1].e
<<" │"<<setw(5)<<people[i-1].c
<<" │"<<endl;
if(i==n) break;
cout<<"├—————┼—————┼——————┼——————┼—————┤"<<endl;
}
cout<<"└—————┴—————┴——————┴——————┴—————┘"<<endl;
cin.get();cin.get();
}
void print1(int l,int *p) // 输出要删除的学生的信息
{
if (l==0) cout<<"无学生资料."<<endl;
int m(0);
cout<<"┌—————┬—————┬——————┬——————┬—————┐"<<endl;
cout<<"│ 学号 │ 姓名 │ 数学 │ 英语 │ C++ │"<<endl;
cout<<"├—————┼—————┼——————┼——————┼—————┤"<<endl;
for(int i=1;i<l+1;i++)
{
cout<<"│ "<<setw(5)<<people[*(p+m)].number
<<" │ "<<setw(5)<<people[*(p+m)].name
<<" │"<<setw(5)<<people[*(p+m)].math
<<" │"<<setw(5)<<people[*(p+m)].e
<<" │"<<setw(5)<<people[*(p+m)].c
<<" │"<<endl;
if(i==l) break;
cout<<"├—————┼—————┼——————┼——————┼—————┤"<<endl;
}
cout<<"└—————┴—————┴——————┴——————┴—————┘"<<endl;
}

参考资料: C++语言程序设计 郑莉版(清华大学出版社)

灰色8酷
2010-06-06 · TA获得超过306个赞
知道小有建树答主
回答量:414
采纳率:100%
帮助的人:376万
展开全部
这个东西还是自己写比较好,对你入门很有帮助的,可以稍微理解下数据的存储,以后学习数据库可以对比下。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
在梯田捕蝶的秋海棠
2010-06-06 · TA获得超过1262个赞
知道小有建树答主
回答量:195
采纳率:0%
帮助的人:135万
展开全部
过几天我考完专业课再帮你解答,如果你还没有答案的话
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
世界精选知识交流
2010-06-06 · TA获得超过396个赞
知道小有建树答主
回答量:481
采纳率:0%
帮助的人:185万
展开全部
这个,
还真得自己写。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式