学生信息管理系统

3 篇文章 0 订阅

学生信息管理系统

学生奖项信息管理,最后的结果添加到两个不同的文件中。

第一个文件为基本信息,第二个文件是学生获奖信息。

前提注意:
对 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");
}

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值