c语言学生学籍管理系统

已知要求管理的学生信息包括:学号、姓名、性别、年龄。设计

一个程序,完成如下功能:

(1)能从键盘上输入若干学生的信息

(2)能将学生的信息保存到磁盘上

(3)能从指定的磁盘文件中读取学生信息

(4)添加学生信息

(5)删除学生信息

第1个回答  2017-03-24
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>//用getch();
using namespace std;
/*程序中一般用i表示学生序号,j表示科目序号
*其他循环变量用k,m,n表示
*最多统计10科50人的成绩信息
*temname用于临时储存姓名
*temsub用于临时储存科目名称
*data.txt用于储存成绩; data1.txt用于储存学科名称、学时、学分; data2.txt用于储存学生信息
*/
char name[51][20] ; //姓名
int Id[51] ; //学号
int sex[51] ; //性别
int tel[51] ; //联系方式
char subject[11][20] ; //学科
int score[11][51] ; //成绩 格式为score[j][i] j i 以1为初始值
int shi[11] ; //学时
int fen[11] ; //学分
/*添加科目*/
void subadd () //添加科目
{
int j;
char subjectname[20];
cout<<"输入添加科目名称:\t";
cin>>subjectname;
for (j=1;j<=10;j++)
{
if (strcmp(subject[j],"KONG")==0)
{
strcpy(subject[j],subjectname);
break;
}
}
cout<<endl<<"输入该科目学时:\t\t";
cin>>shi[j];
cout<<endl<<"输入该科目学分:\t\t";
cin>>fen [j];
cout<<endl<<"输入任意字符退出"<<endl;
getch();
}
/*删除科目*/
void subdel () //删除科目
{
int i,j,k;
char temsub[20];
cout<<"输入科目:"<<endl;
cin>>temsub;
for (j=1;j<=10;j++) //查找科目j
{
if ((strcmp(subject[j],temsub)!=0)&&(j==10))
{
cout<<"无此科目!"<<endl<<"输入任意字符退出"<<endl;
getch();
return;
}
if (strcmp(subject[j],temsub)==0)
break;
}
for (k=j;k<=9;k++)
{
strcpy(subject[k],subject[k+1]); //删除科目j,将科目j后的数据移动
shi[k]=shi[k+1];
fen[k]=fen[k+1];
for (i=1;i<=50;i++) //删除科目j的成绩
{
score[k][i]=score[k+1][i];
}
}
cout<<"输入任意字符退出"<<endl;
getch();
}
/*判断成绩等级*/
void dengji(int af) //判断成绩等级
{
if (af>=90) cout<<"A";
else if (af>=80) cout<<"B";
else if (af>=70) cout<<"C";
else if (af>=60) cout<<"D";
else cout<<"E";
}
/*添加学生*/
void stuadd () //添加学生
{
int i,j;
char bijiao[20]="\0";
for (i=1;i<=50;i++)
{
if (strcmp(name[i],"KONG")==0)
break;
if ((strcmp(name[i],"KONG")!=0)&&(i==50))
{
cout<<"数据已满!"<<endl<<"输入任意字符退出"<<endl;
getch();
return;
}
}
cout<<"输入学生姓名:\t\t";
cin>>name[i];
cout<<endl<<"输入学生性别(男1/女2):";
cin>>sex[i];
cout<<endl<<"输入学生学号:\t\t";
cin>>Id[i];
cout<<endl<<"输入学生联系方式:\t";
cin>>tel[i];
for (j=1;j<=10;j++)
{
if (strcmp(subject[j],"KONG")==0) break;
cout<<"输入"<<subject[j]<<"成绩:\t\t";
cin>>score[j][i];
cout<<endl;
}
cout<<"姓名\t\t"<<name[i]<<endl<<"性别\t\t"<<sex[i]<<endl<<"学号\t\t"<<Id[i]<<endl<<"联系方式\t"<<tel[i]<<endl;
cout<<"科目\t\t分数\t\t等级\t\t"<<endl;
for (j=1;j<=10;j++)
{
if (strcmp(subject[j],"KONG")==0) break;
cout<<subject[j]<<"\t\t"<<score[j][i]<<"\t\t";
dengji(score[j][i]);
cout<<endl;
}
cout<<"输入任意字符退出"<<endl;
getch();
}
/*删除学生*/
void studel () //删除学生
{
int i,j,k;
char temname[20];
cout<<"输入学生姓名:"<<endl;
cin>>temname;
for (i=1;i<=50;i++)
{
if ((strcmp(name[i],temname)!=0)&&(i==50))
{
cout<<"无此学生!"<<endl<<"输入任意字符退出"<<endl;
getch();
return;
}
if (strcmp(name[i],temname)==0)
break;
}
for (k=i;k<=49;k++)
{
strcpy(name[k],name[k+1]);
Id[k]=Id[k+1];
sex[k]=sex[k+1];
tel[k]=tel[k+1];

}
for (k=i;k<=49;k++)
{
for (j=1;j<=10;j++)
score[j][k]=score[j][k+1];
}
cout<<"输入任意字符退出"<<endl;
getch();
}
/*查询成绩*/
void chengji () //查询成绩
{
char temname[20];
int i,j=1,ji=0,zongfen=0; //学分积,总学分 ji为学分积,zongfen为总学分
cout<<"输入学生姓名:"<<endl;
cin>>temname;
cout<<endl;
for (i=1;i<=50;i++) //查找学生
{
if ((strcmp(name[i],temname)!=0)&&(i==50))
{
cout<<"无此学生!"<<"输入任意字符退出"<<endl;
getch();
return;
}
if (strcmp(name[i],temname)==0)
break;
}
cout<<"姓名\t\t"<<name[i]<<endl<<"性别\t\t"<<sex[i]<<endl<<"学号\t\t"<<Id[i]<<endl<<"联系方式\t"<<tel[i]<<endl;
if (strcmp(subject[j],"KONG")!=0) cout<<"科目\t\t"<<"成绩\t\t"<<"等级\t\t"<<endl;
for (j=1;j<=10;j++)
{
if (strcmp(subject[j],"KONG")==0) break;
cout<<subject[j]<<"\t\t"<<score[j][i]<<"\t\t";
dengji(score[j][i]);
cout<<endl;
}
for (j=1;j<=10;j++) //计算学分积
{
if (strcmp(subject[j],"KONG")==0) break;
ji=ji+score[j][i]*fen[j];
zongfen=zongfen+fen[j];
}
ji=ji/zongfen;
cout<<"学分积\t\t"<<ji<<endl;
cout<<"输入任意字符退出"<<endl;
getch();
}
/*成绩统计*/
void tongji () //成绩统计
{
char temsub[20],na[51][20],tempna[20];
int sc[51],tempsc;
int j,k,m;
cout<<"输入科目名称:"<<endl;
cin>>temsub;
cout<<endl;
for (j=1;j<=10;j++) //查找科目j
{
if ((strcmp(subject[j],temsub)!=0)&&(j==10))
{
cout<<"无此科目!"<<"输入任意字符退出"<<endl;
getch();
return;
}
if (strcmp(subject[j],temsub)==0)
break;
}
for (k=1;k<=50;k++) //成绩排序采用冒泡排序法
{
strcpy(na[k],name[k]);
sc[k]=score[j][k];
}
for (k=1;k<=50;k++)
{
for (m=1;m<51-k;m++)
{
if (sc[m]>sc[m+1])
{
tempsc=sc[m];strcpy(tempna,na[m]);
sc[m]=sc[m+1];strcpy(na[m],na[m+1]);
sc[m+1]=tempsc;strcpy(na[m+1],tempna);
}
}
}
cout<<"名次\t\t"<<"姓名\t\t"<<"成绩\t\t"<<"等级\t\t"<<endl;
for (k=50;k>=1;k--)
{
if (strcmp(na[k],"KONG")==0) break;
cout<<51-k<<"\t\t"<<na[k]<<"\t\t"<<sc[k]<<"\t\t";
dengji(sc[k]);
cout<<endl;
}
cout<<"输入任意字符退出"<<endl;
getch();
}
/*修改成绩*/
void xiugai() //修改成绩
{
int i,j;
char temname[20],temsub[20];
cout<<"要修改的学生姓名:\t";
cin>>temname;
cout<<endl;
for (i=1;i<=50;i++) //查找学生
{
if ((strcmp(name[i],temname)!=0)&&(i==50))
{
cout<<"无此学生!"<<endl<<"输入任意字符退出"<<endl;
getch();
return;
}
if (strcmp(name[i],temname)==0)
{
cout<<"输入科目名称:\t\t";
cin>>temsub;
cout<<endl;
for (j=1;j<=10;j++) //查找科目j
{
if ((strcmp(subject[j],temsub)!=0)&&(j==10))
{
cout<<"无此科目!"<<"输入任意字符退出"<<endl;
getch();
return;
}
if (strcmp(subject[j],temsub)==0)
{
cout<<"输入新的成绩:\t\t";
cin>>score[j][i];
cout<<endl;
break;
}
}
break;
}
}
cout<<"输入任意字符退出"<<endl;
getch();
}
/*主界面*/
void ShowMenu() //主界面
{
cout<<endl<<endl;
cout<<" 学 生 成 绩 管 理 系 统 "<<endl<<endl;
cout<<"***************************** 9.初始化程序 **************************"<<endl<<endl;
cout<<"----------------------------- 1.添加科目 --------------------------"<<endl;
cout<<"----------------------------- 2.删除科目 --------------------------"<<endl;
cout<<"----------------------------- 3.添加学生 --------------------------"<<endl;
cout<<"----------------------------- 4.删除学生 --------------------------"<<endl;
cout<<"----------------------------- 5.查询成绩 --------------------------"<<endl; //含学分积
cout<<"----------------------------- 6.各科排名 --------------------------"<<endl;
cout<<"----------------------------- 7.修改成绩 --------------------------"<<endl;
cout<<"----------------------------- 0.退出系统 --------------------------"<<endl;
cout<<"初始化同时会清空已输入的数据!!"<<endl<<"初次使用程序请初始化!!"<<endl;
cout<<"\n\t\t\n\t\t请选择:";
}
void readtxt() //读取信息
{
int i,j;
ifstream file("data.txt");
for (i=1;i<=50;i++)
{
for (j=1;j<=10;j++)
{
file>>score[j][i];
}
}
file.close();
}
void readtxt1()
{
int j;
ifstream file("data1.txt");
for (j=1;j<=10;j++)
{
file>>subject[j];
file>>shi[j];
file>>fen[j];
}
file.close();
}
void readtxt2()
{
int i;
ifstream file("data2.txt");
for (i=1;i<=50;i++)
{
file>>name[i];
file>>Id[i];
file>>sex[i];
file>>tel[i];
}
file.close();
}
/*存入成绩*/
void savetxt()
{
int i,j;
FILE *fp,*fp1,*fp2;
if ((fp=fopen("data.txt","w+"))==NULL) //存入成绩
{
cout<<"文件不能打开"<<endl;
exit(0);
}
for (i=1;i<=50;i++)
{
for (j=1;j<=10;j++)
{
fprintf(fp,"%d ",score[j][i]);
}
}
fclose(fp);

if ((fp1=fopen("data1.txt","w+"))==NULL) //存入学科名称、学时、学分
{
cout<<"文件不能打开"<<endl;
exit(0);
}
for (j=1;j<=10;j++)
{
fprintf(fp1,"%s %d %d ",subject[j],shi[j],fen[j]);
}
fclose(fp1);

if ((fp2=fopen("data2.txt","w+"))==NULL) //存入学生信息
{
cout<<"文件不能打开"<<endl;
exit(0);
}
for (i=1;i<=50;i++)
{
fprintf(fp2,"%s %d %d %d ",name[i],Id[i],sex[i],tel[i]);
}
fclose(fp2);
}
void chu() //初始化程序,将所有数据赋值"KONG"或0
{
int i,j;
for (j=0;j<=10;j++) //"KONG"用于表示空值,无数据
{
shi[j]=0;
fen[j]=0;
strcpy(subject[j],"KONG");
for (i=1;i<=50;i++)
{
score[j][i]=0;
}
}
for (i=0;i<=50;i++)
{
Id[i]=0;
sex[i]=0;
tel[i]=0;
strcpy(name[i],"KONG");
}
savetxt();
}
int main ()
{
system("color 30");//背景湖蓝色,字符黑色
int x,j,i=0;

readtxt ();
readtxt1();
readtxt2();
bool quit=false;
cout<<"\t\t -------------------------------------------------"<<endl; //欢迎界面开始
for(i=0;i<2;i++)
cout<<"\t\t|\t\t\t\t\t\t |"<<endl;
cout<<"\t\t|★★★★【 欢迎进入学生成绩管理系统 】★★★★ |"<<endl;
for(i=0;i<2;i++)
cout<<"\t\t|\t\t\t\t\t\t |"<<endl;
cout<<"\t\t -------------------------------------------------\n"<<endl; //欢迎界面结束
cout<<endl<<"\t\t按任意键开始";
getch();
while(!quit)
{
system("cls");
ShowMenu(); //显示主界面
cin>>x;
switch(x)
{
case 0:quit=true;break;
case 1:subadd();break;
case 2:subdel();break;
case 3:stuadd();break;
case 4:studel();break;
case 5:chengji();break;
case 6:tongji();break;
case 7:xiugai();break;
case 9:chu();break;
}
}
savetxt(); //程序退出前将数据存入记事本
return 0;
}
相似回答