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;
}