简易的学生信息管理系统

一次结课作业,欢迎各位大佬指正!

#include<stdio.h>
#include<string.h>
#include<stdlib.h> //EXIT(),NULL对应
#define N 3

int i,x,flag=0,flag2=0;


//定义了一种学生的“类型 ”
struct student
{
int id; //学号
char name[10]; //姓名
char sex; //性别'M''F'
int age; //年龄
float score; //综合分
char level[20]; //等级:90~100优秀 80~90良好 70~80中等 60~70及格 60以下不及格
};

//函数的申明
void input(struct student []);
void output(struct student []);
void fun1(struct student []);
void fun2(struct student []);
void sort(struct student []);
void WriteFile(struct student []);
void ReadFile(struct student []);

//主函数
int main() {
struct student a[N];
printf("请首先输入学生信息!");
while(1) {
//用户界面
printf("\n");
printf("=====================================================================\n");
printf("请选择:\n");
printf("1. 输入学生信息\n");
printf("2. 浏览学生信息\n");
printf("3. 查询得分最高和最低的学生信息\n");
printf("4. 查询并修改学生信息\n");
printf("5. 按综合分排序\n");
printf("6. 保存学生信息\n");
printf("7. 导入学生信息\n");
printf("8. 退出\n");
printf("=====================================================================\n");
printf("您的选择为:");
scanf("%d",&x);

//函数调用
switch(x) {
case 1: //输入学生信息
system("cls");
input(a);
flag=1;
flag2=1;
break;
case 2: //浏览学生信息
system("cls");
if(flag) output(a);
else printf("尚未输入学生信息,请先选择1输入或7导入学生信息\n");
break;
case 3: //查询得分最高和得分最低的学生信息
system("cls");
if(flag)fun1(a);
else printf("尚未输入学生信息,请先选择1输入或7导入学生信息\n");
break;
case 4: //查询并修改学生信息
system("cls");
if(flag)fun2(a);
else printf("尚未输入学生信息,请先选择1输入或7导入学生信息\n");
break;
case 5: //按综合分排序
system("cls");
if(flag)sort(a);
else printf("尚未输入学生信息,请先选择1输入或7导入学生信息\n");
break;
case 6: //保存学生信息
system("cls");
if(flag)WriteFile(a);
else printf("尚未输入学生信息,无法保存!\n");
break;
case 7: //导入学生信息
system("cls");
ReadFile(a);
flag=1;
break;
case 8:
system("cls");
printf("已退出!");
return;
default:
system("cls");
printf("输入有误,请重新选择!");
break;
}
}
return 0;
}

//输入学生信息
void input(struct student b[100]){
printf("请输入%d个学生的信息(学号、姓名、性别、年龄、综合分):\n",N);
for(i=0;i<N;i++)
scanf("%d%s%*c%c%d%f",&b[i].id,&b[i].name,&b[i].sex,&b[i].age,&b[i].score);
}

//浏览学生信息
void output(struct student b[100]){
printf("学号\t姓名\t性别\t年龄\t综合分\t等级\n");
for(i=0;i<N;i++)
{
if(b[i].score>=90){
strcpy(b[i].level,"优秀");
}else if(b[i].score>=80){
strcpy(b[i].level,"良好");
}else if(b[i].score>=70){
strcpy(b[i].level,"中等");
}else if(b[i].score>=60){
strcpy(b[i].level,"及格");
}else{
strcpy(b[i].level,"不及格");
}
printf("\n%d\t%s\t%c\t%d\t%.2f\t%s\n",b[i].id,b[i].name,b[i].sex,b[i].age,b[i].score,b[i].level);
}
}

//查询得分最高和得分最低的学生信息
void fun1(struct student b[N]) {
int i,j;
struct student ts;
for(i=1;i<N;i++)
for(j=0;j<N-i;j++)
if(b[j].score>b[j+1].score) {
ts=b[j];
b[j]=b[j+1];
b[j+1]=ts;
}
for(i=0;i<N;i++) {
if(b[i].score<60) strcpy(b[i].level,"不及格");
else if(b[i].score<70) strcpy(b[i].level,"及格");
else if(b[i].score<80) strcpy(b[i].level,"中等");
else if(b[i].score<90) strcpy(b[i].level,"良好");
else strcpy(b[i].level,"优秀");
}
printf("高低分\t学号\t姓名\t性别\t年龄\t综合分\t等级\n");
printf("\n最高分\t%d\t%s\t%c\t%d\t%.2f\t%s\n",b[N-1].id,b[N-1].name,b[N-1].sex,b[N-1].age,b[N-1].score,b[N-1].level);
printf("\n最低分\t%d\t%s\t%c\t%d\t%.2f\t%s\n",b[0].id,b[0].name,b[0].sex,b[0].age,b[0].score,b[0].level);
}

//查询并修改学生信息
void fun2(struct student b[N]) {
int i,n;
int biao=0;
char c,q[20];
float score;
printf("请输入要查询的学生学号:");
scanf("%d",&n);
for(i=0;i<N;i++){
if(b[i].id==n) break;
}
if(i==N){
printf("查无此人!");
return;
} else {
if(b[i].score<60) strcpy(b[i].level,"不及格");
else if(b[i].score<70) strcpy(b[i].level,"及格");
else if(b[i].score<80) strcpy(b[i].level,"中等");
else if(b[i].score<90) strcpy(b[i].level,"良好");
else strcpy(b[i].level,"优秀");
printf("学号\t姓名\t性别\t年龄\t综合分\t等级\n");
printf("\n%d\t%s\t%c\t%d\t%.2f\t%s\n",b[i].id,b[i].name,b[i].sex,b[i].age,b[i].score,b[i].level);
printf("\n您可以进行如下选择:\n");
printf("\nQ[q].退出\tA[a].修改姓名\tB[b].修改综合分\n\n");
getchar();
printf("请选择:");
scanf("%c",&c);
switch(c) {
case 'Q':
case 'q':
return;
case 'A':
case 'a':
printf("将该同学姓名修改为:");
getchar();gets(q);
strcpy(b[i].name,q);
biao=1;
break;
case 'B':
case 'b':
printf("将该同学综合分修改为:");
scanf("%f",&score);
b[i].score=score;
biao=1;
break;
default:
printf("输入不合法!");
}
if(biao==1){
printf("学号\t姓名\t性别\t年龄\t综合分\t等级\n");
if(b[i].score<60) strcpy(b[i].level,"不及格");
else if(b[i].score<70) strcpy(b[i].level,"及格");
else if(b[i].score<80) strcpy(b[i].level,"中等");
else if(b[i].score<90) strcpy(b[i].level,"良好");
else strcpy(b[i].level,"优秀");
printf("\n%d\t%s\t%c\t%d\t%.2f\t%s\n",b[i].id,b[i].name,b[i].sex,b[i].age,b[i].score,b[i].level);
}
}
}

//按综合分排序
void sort(struct student b[N]) {
int i,j;
struct student ts;
for(i=1;i<N;i++)
for(j=0;j<N-i;j++){
if(b[j].score>b[j+1].score){
ts=b[j+1];
b[j+1]=b[j];
b[j]=ts;
}
}
printf("学号\t姓名\t性别\t年龄\t综合分\t等级\n");
for(i=0;i<N;i++){
if(b[i].score<60) strcpy(b[i].level,"不及格");
else if(b[i].score<70) strcpy(b[i].level,"及格");
else if(b[i].score<80) strcpy(b[i].level,"中等");
else if(b[i].score<90) strcpy(b[i].level,"良好");
else strcpy(b[i].level,"优秀");
printf("\n%d\t%s\t%c\t%d\t%.2f\t%s\n",b[i].id,b[i].name,b[i].sex,b[i].age,b[i].score,b[i].level);
}
}

//保存学生信息
void WriteFile(struct student b[N])
{
FILE *fp;
char c[100];
printf("请输入要保存的路径和文件名:");
getchar();
scanf("%s",c);//输入要保存到的路径和文件名
fp=fopen(c,"w");//打开文件
fprintf(fp,"学号\t姓名\t性别\t年龄\t综合分\t等级");//保存表头到文件
for(i=0;i<N;i++){
if(b[i].score<60) strcpy(b[i].level,"不及格");
else if(b[i].score<70) strcpy(b[i].level,"及格");
else if(b[i].score<80) strcpy(b[i].level,"中等");
else if(b[i].score<90) strcpy(b[i].level,"良好");
else strcpy(b[i].level,"优秀");
fprintf(fp,"\n%d\t%s\t%c\t%d\t%.2f\t%s\n",b[i].id,b[i].name,b[i].sex,b[i].age,b[i].score,b[i].level);
}//保存每个学生信息到文件
fclose (fp);//关闭文件
}

//导入学生信息
void ReadFile(struct student b[N]){
char c[50];
FILE *fp;
int i;
printf("请输入要打开的文件的路径和文件名:");
getchar();
scanf("%s",c);//输入要打开的路径和文件名 C:\Users\Administrator\Desktop\C语言实践结课作业\学生信息表.txt
fp=fopen(c,"r");//打开文件
if(fp==NULL) {
printf("路径有误!");
}else{
fscanf(fp,"学号\t姓名\t性别\t年龄\t综合分\t等级");//保存表头到文件
for(i=0;i<N;i++)
fscanf(fp,"\n%d %s %c %d %f %s\n",&b[i].id,&b[i].name,&b[i].sex,&b[i].age,&b[i].score,&b[i].level);//把信息写给struct student
fclose(fp);
printf("\n学号\t姓名\t性别\t年龄\t综合分\t等级");
for(i=0;i<N;i++)
printf("\n%d\t%s\t%c\t%d\t%.2f\t%s",b[i].id,b[i].name,b[i].sex,b[i].age,b[i].score,b[i].level);
}
}

posted @ 2018-01-02 20:16  铸犁的哈士奇  阅读(88)  评论(0)    收藏  举报