学生信息管理系统

c语言实习要求做学生信息管理系统,完全没有概念,试着写了一下,都是用结构体,链表不会用,感觉挺烂的。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
struct stu
{
    int num;
    char name[100];
    char male[5];
    double score[5];
    double ave;
    double sum;
    int rank;
}data[10000];
int k=0,tmp=0;
void add()
{
    cin>>data[k].num;
    cin>>data[k].name;
    cin>>data[k].male;
    data[k].sum=0.0;
    for(int i=0;i<5;i++)
    {
        cin>>data[k].score[i];
        data[k].sum+=data[k].score[i];
    }
    data[k].ave=data[k].sum/5.0;
    k++;
}
void show()
{
    for(int i=0;i<k;i++)
    printf("%d %s %s %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf\n",data[i].num,data[i].name,data[i].male,data[i].score[0],
    data[i].score[1],data[i].score[2],data[i].score[3],data[i].score[4],data[i].ave,data[i].sum);
}
void found()
{
    int a;
    cout<<"请输入学生的学号"<<endl;
    cin>>a;
    int flag=0;
    for(int i=0;i<k;i++)
    if(data[i].num==a)
    {
        printf("%d %s %s %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf\n",data[i].num,data[i].name,data[i].male,data[i].score[0],
        data[i].score[1],data[i].score[2],data[i].score[3],data[i].score[4],data[i].ave,data[i].sum);
        flag=1;
    }
    if(flag==0)
    cout<<"未查找到"<<endl;
}
void change()
{int n,i,f;
 int xuehao;
 int paiming;
 char xingming[100];
    cout<<"请输入查找修改类型:"<<endl;
    cout<<"1.学号 2.姓名 3.排名"<<endl;
    cin>>n;
    switch(n)
    {
        case 1:
        cin>>xuehao;
        for(int i=1;i<=k;i++)
        {
            if(xuehao==data[i].num)
            {
                f=i;
                break;
            }
        }
         break;
        case 2:
        cin>>xingming;
        for(int i=1;i<=k;i++)
        {
            if(strcmp(xingming,data[i].name)==0)
            {
                f=i;
                break;
            }
        }
         break;
        case 3:
        cin>>paiming;
        for(int i=1;i<=k;i++)
        {
            if(paiming==data[i].rank)
            {
                f=i;
                break;
            }
        }
    }
    cout<<"输入新的学生信息:"<<endl;
    cin>>data[f].num>>data[f].name>>data[f].male;
    cin>>data[f].score[0]>>data[f].score[1]>>data[f].score[2]>>data[f].score[3]>>data[f].score[4];
    data[f].sum=data[f].score[0]+data[f].score[1]+data[f].score[2]+data[f].score[3]+data[f].score[4];
    data[f].ave=data[f].sum/5.0;
    data[f].rank=1;
    cout<<"学生信息修改成功"<<endl;
}
void delet()
{int xuehao;
 char xingming[100];
 int paiming;
    cout<<"1.学号 2.姓名 3.排名"<<endl;
    cout<<"请输入查找删除类型:"<<endl;
    int n,i,f;
    cin>>n;
    switch(n)
    {
        case 1:
        cin>>xuehao;
        for(int i=1;i<=k;i++)
        {
            if(xuehao==data[i].num)
            {
                f=i;
                break;
            }
        }
         break;
        case 2:
        cin>>xingming;
        for(int i=1;i<=k;i++)
        {
            if(strcmp(xingming,data[i].name)==0)
            {
                f=i;
                break;
            }
        }
         break;
        case 3:
        cin>>paiming;
        for(int i=1;i<=k;i++)
        {
            if(paiming==data[i].rank)
            {
                f=i;
                break;
            }
        }
         break;
    }
    for(int j=f+1;j<k;j++)
    {
        data[j-1] = data[j];
    }
    k--;
}
int sort_num_up(const stu&a,const stu&b)
{return a.num<b.num;}
int sort_num_down(const stu&a,const stu&b)
{return a.num>b.num;}
int sort_name_up(const stu&a,const stu&b)
{return strcmp(a.name,b.name)<0;}
int sort_name_down(const stu&a,const stu&b)
{return strcmp(a.name,b.name)>0;}
int sort_rank_up(const stu&a,const stu&b)
{return a.rank<b.rank;}
int sort_rank_down(const stu&a,const stu&b)
{return a.rank>b.rank;}
void sort_()
{int n,m;
    cout<<"1.学号 2.名称 3.名次"<<endl;
    cout<<"1.升序 2.降序"<<endl;
    cout<<"请输入排序类型及其方式"<<endl;
    cin>>n>>m;
    switch(n)
    {
        case 1:
        {
            if(m==1)
                sort(data,data+k,sort_num_up);
            if(m==2)
                sort(data,data+k,sort_num_down);
        }
        case 2:
        {
            if(m==1)
                sort(data,data+k,sort_name_up);
            if(m==2)
                sort(data,data+k,sort_name_down);
        }
        case 3:
        {
            if(m==1)
                sort(data,data+k,sort_rank_up);
            if(m==2)
                sort(data,data+k,sort_rank_down);
        }
    }
}
void save(char *filename)
{
    FILE *fp=fopen(filename,"at");
    for(int i=tmp;i<k;i++)
    {
        fprintf(fp,"%d %s %s %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf %.2lf %d\n",data[i].num,data[i].name,data[i].male,data[i].score[0],data[i].score[1],data[i].score[2],data[i].score[3],data[i].score[4],data[i].ave,data[i].sum);
    }
    fclose(fp);
    tmp=k;
    return;
}
void read(char *filename)
{
    char temp;
    FILE *fp;
    fp = fopen(filename,"r");
    while((temp = fgetc(fp))!=EOF)
    {
        printf("%c",temp);
    }
    fclose(fp);
    return ;
}
void build()
{
    cout<<"请输入新建文件名称: ";
}
int main()
{
  while(1)
  {
      puts("1.增加学生信息");
      puts("2.修改学生信息");
      puts("3.显示学生信息");
      puts("4.查询学生信息");
      puts("5.删除学生信息");
      puts("6.对学生信息进行排序");
      puts("7.保存学生信息至记录文件");
      puts("8.从记录文件读取学生信息");
      puts("9.新建学生信息文件");
      puts("0.运行结束");
      puts("请输入操作编号");
      int m;
      cin>>m;
      switch(m)
      {
        case 1:
            add();break;
        case 2:
            change();break;
        case 3:
            show();break;
        case 4:
            found();break;
        case 5:
            delet(); break;
        case 6:
            sort_();break;
        case 7:
            save("学生管理系统.txt");break;
        case 8:
            read("学生管理系统.txt");break;
        case 9:
            build();break;
        default :
            puts("请重新输入\n");break;
      }
      cout<<"------------------$$$-----------------"<<endl;
  }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值