学生信息管理系统
学生奖项信息管理,最后的结果添加到两个不同的文件中。
第一个文件为基本信息,第二个文件是学生获奖信息。
前提注意:
对 string 类型用scanf进行读写时候,应该首先对 string类型的变量申请空间。
string s;
s.resize(10);
scanf("%d",&s[0]);
代码如下:
/*
*@author jkl
*@function 1.查找学生获奖信息 2.对学生获奖进行增添或删除操作 3。对学生进行增添。 4. 将信息写到两个文件
*/
#include<cstdio>
#include<vector>
#include<string>
using namespace std;
struct StuInfo{
int id;
char name[8];
char gender[8];
int age;
char major[8];
vector<string> award;
};
vector<StuInfo> stu;
void initial();
void print();
void searchId(int id);
int check(int id);
void change(int id);
void update();
void add();
void del();
int main(){
int choice,stuid;
initial();
print();
printf("\n\n*****选择操作*******\n\n1.按学号查找学生获奖信息\n\n2.通过对学生获奖进行增添或删除操作\n\n3.查看所有人情况\n\n4.增加学生\n\n5.删除学生\n\n0.退出\n\n");
while(scanf("%d",&choice) &&choice){
switch(choice){
case 1:
printf("输入学号:\n");scanf("%d",&stuid);
searchId(stuid);
break;
case 2:
printf("输入学号:\n");scanf("%d",&stuid);
change(stuid);
break;
case 3:
print();
break;
case 4:
add();
break;
case 5:
del();
break;
default:
printf("输入错误\n");
break;
}
printf("\n\n*****选择操作*******\n\n");
}
update();
return 0;
}
void initial(){ //建表工作
vector<string> a,b,c;
a.push_back("2011校奖学金");a.push_back("2012国家奖学金");b.push_back("2012校优秀学生");c.push_back("无");
StuInfo s[3]={{20100001,"史玉明","女",20,"计算机",a},{20100100,"李明 ","男",21,"机械 ",b},{20100234,"张翔 ","男",21,"化工 ",c}};
for(int i=0;i<3;i++){
stu.push_back(s[i]);
}
update();
printf("%s\n\n","文件信息已经分两个文件填好\n\n stu.txt award.txt\n\n");
}
void print(){
for( int i=0;i<stu.size();++i){
printf("%d %s %s %d",stu[i].id,stu[i].name,stu[i].gender,stu[i].age);
for(int j=0;j<stu[i].award.size();++j){
string s=stu[i].award[j];
printf(" %s ",s.c_str());
}
printf("\n");
}
}
int check(int id){//学号查询
int find=-1,i;
for( i=0;i<stu.size();++i){
if(stu[i].id==id){
find = i;
break;
}
}
return find;
}
void searchId(int id){ //-1代表没找到。0代表找到
int find=check(id);
if(find==-1){
printf("没有找到该学生");
return ;
}
printf("获奖信息:");
for(int j=0;j<stu[find].award.size();++j){
string s=stu[find].award[j];
printf(" %s ",s.c_str());
}
printf("\n");
}
void change(int id){
int find=check(id),choice;
if(find==-1){
printf("没有找到该学生");
return ;
}
printf("\n\n请入增加还是删除,1代表增加,2是删除\n\n");
scanf("%d",&choice);
if(choice==1){
if(stu[find].award[0]=="无"){
stu[find].award.pop_back();
}
string s;
s.resize(20);//这一步不可以省略
printf("输入增加奖项名称:\n");
scanf("%s",&s[0]);
stu[find].award.push_back(s);
printf("改动成功\n");
}
else if(choice==2){
int aId;
if(stu[find].award[0]=="无"){
printf("没有奖项可以删除\n\n");
return ;
}
printf("输入删除第几个奖项:\n");
scanf("%d",&aId);
if(aId>stu[find].award.size()){
printf("没有这个奖项\n");
}
stu[find].award.erase(stu[find].award.begin()+aId-1);printf("删除完成\n\n");
if(stu[find].award.size()==0) stu[find].award.push_back("无");
}
else{
printf("错误\n");
return ;
}
}
void update(){
FILE *pa=fopen("stu.txt","w");
FILE *pb=fopen("award.txt","w");
for(int i=0;i<stu.size();i++){
fprintf(pa,"%d %s %s %d\n",stu[i].id,stu[i].name,stu[i].gender,stu[i].age);
for(int j=0;j<stu[i].award.size();++j){
string s=stu[i].award[j];
fprintf(pb,"%s ",s.c_str());
}
fprintf(pb,"%c",'\n');
}
fclose(pa);
fclose(pb);
}
void add(){
string s;s.resize(20);
StuInfo info;
printf("输入学生信息,没有奖励写无\n");
scanf("%d%s%s%d%s",&info.id,&info.name,&info.gender,&info.age,&s[0]);
stu.push_back(info);
stu.back().award.push_back(s);
printf("构建完成\n");
}
void del(){
printf("要删除学生学号\n");
int id;
scanf("%d",&id);
int find=check(id);
if(find==-1){
printf("没有找到该学生");
return ;
}
stu.erase(stu.begin()+find-1);
printf("删除成功\n\n");
}