c语言学生成绩管理系统c

需要处理的基础数据
学生基本信息:学号(例如2003级12班6号写作20031206)、姓名、性别、年龄、课程名称(外语SCORE[0]、高数SCORE[1]、C语言SCORE[2]、马哲SCORE[3])、考试成绩等。
三、系统功能
1.学生基本情况录入。
2.允许对已经录入的数据进行显示。
3.允许进行数据的插入。
4.删除基本数据的相关信息。
5.基于姓名的查询。如:姓张的所有同学。
6.基于各种基本数据的统计计算。如:
①统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩)。
②列出90分以上(包括90)、80分以上(包括80)、70分以上(包括70)、60分以上(包括60)、不及格学生清单(学号、姓名、不及格的课程和成绩)。
③统计并输出各门功课的平均成绩和总平均成绩。

任务说明
1.查找相关函数、编写数据结构、算法、代码等,8学时;(周一)
2.完成菜单以及插入、删除记录过程;(周二)
菜单的样板模式为:
" 1. Enter list" 输入记录
" 2. Delete a record from list" 从表中删除记录
" 3. print list " 显示链表中所有记录
" 4. Search record on name" 按照姓名查找记录
" 5. Save the file" 将链表中记录保存到文件中
" 6. Load the file" 从文件中读入记录
" 7. compute the score" 计算所有学生的总分和均分
" 8. insert record to list " 插入记录到表中
" 9. Quit" 退出
3.完成查找、显示记录;(周三)
4.完成保存数据到文件和从文件读数据的过程;(周四)
5.完成学生的总分和均分的计算;(周五)
七、要求
1.只能使用C语言,源程序要有适当的注释,使程序容易阅读。
2.要有用户界面。要求至少采用文本菜单界面;鼓励采用图形菜单界面。
3.必须使用结构和链表等数据结构。
4.使用文件保存数据。

第1个回答  2010-08-24
以前帮别人写的 你可以看看 呵呵 不是很符合条件
********************************学生管理系统****************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct stu1
{
int num;
char name[20];
char sex[5];
char age[3];
char phone[20];
}stu1;
typedef struct stu2
{
//char num[20];
//char name[20];
int proj1;
int proj2;
int proj3;
int proj4;
int proj5;
int proj6;
}stu2;

void welcome();
int check_key(char key[]);
int m_can_do();
int m_class_can_do();
void manage_class();
void add_class();
void del_class();
void change_proj();
int m_stu_can_do();
void manage_stu();
void log_stu();
void change_stu();
void read_stu1(char clas[], stu1 stu[]);
int find_stu(stu1 stu[], int num);
void del_stu();
void read_stu2(char clas1[], stu2 stud[]);
void log_score();
void change_score();
void del_clas_stu();
int m_find_can_do();
void find();
void find_clas_basic();
void find_clas_score();
void find_stu_basic();
void find_stu_all();
//void chane_stu();

int main(){
int does;
char key[20];
int result;
welcome();
printf("请输入密码:");
scanf("%s", key);
printf("\n\n");
result = check_key(key);
while(result)
{
printf("您输入的密码有误,请重新输入:");
scanf("%s", key);
result = check_key(key);
printf("\n\n");

}
does = m_can_do();
while(true)
{
if(1 == does)
{
manage_class();
does = m_can_do();
}
if(2 == does)
{
manage_stu();
does = m_can_do();
}
if(3 == does)
{
find();
does = m_can_do();
}
if(4 == does)
{
exit(0);
}
}

return 0;
}

/****************************************************函数***********************************/
void welcome()
{
printf("欢迎使用本学生管理系统。\n\n");
}

int check_key(char key[])
{
FILE * fp;
char right_key[20];
int result;
fp = fopen("key", "r");
fscanf(fp, "%s", right_key);
result = strcmp(key, right_key);
return result;
}

int m_can_do()
{
int d;
printf("您可以进行的操作为:\n\n");
printf("1 班级管理 2 学生管理 3 查询 4 退出\n\n请输入:");
scanf("%d", &d);
printf("\n\n");
while(1 != d && 2 != d && 3 != d && 4 != d)
{
printf("您的书有误,请重新输入:");
scanf("%d", &d);
printf("\n\n");
}
return d;
}

/************************************班级办理部分***************************/
int m_class_can_do()
{
int d;
printf("请输入您想要进行的操作:\n\n");
printf("1 添加班级 2 删除班级 3 更改科目\n\n4 返回上一层 5 退出\n\n");
printf("请输入:");
scanf("%d", &d);
printf("\n\n");
while(1 != d && 2 != d && 3 != d && 4 != d && 5 != d)
{
printf("您的输入有误,请重新输入:");
scanf("%d", & d);
printf("\n\n");
}
return d;

}

void manage_class()
{
int does;
does = m_class_can_do();
while(true)
{
if(1 == does)
{
add_class();
does = m_class_can_do();
}
if(2 == does)
{
del_class();
does = m_class_can_do();
}
if(3 == does)
{
change_proj();
does = m_class_can_do();
}
if(4 == does)
{
return;
}
if(5 == does)
{
exit(0);
}
}
}

void add_class()
{
FILE * fp;
char name[20], name1[20];
printf("请输入您想要添加的班级的名字:");
scanf("%s", name);
printf("\n\n");
while((fp = fopen(name, "r")))
{
fclose(fp);
printf("您输入的班级已经存在,请重新输入:");
scanf("%s", name);
printf("\n\n");
}
// fclose(fp);
sprintf(name1, "%s_score", name);
fp = fopen(name, "w");
fclose(fp);
fp = fopen(name1, "w");
fclose(fp);
printf("\n\n");
printf("*************************************************************\n");
printf(" 班级添加成功。 \n");
printf("**************************************************************\n");
}

void del_class()
{
FILE * fp;
char name[20], name1[20];
printf("请输入您想删除的班级名:");
scanf("%s", name);
printf("\n\n");
while(!(fp = fopen(name, "r")))
{
printf("您输入的班级不存在,请重新输入:");
scanf("%s", name);
printf("\n\n");
}
fclose(fp);
sprintf(name1, "%s_score", name);
remove(name);
remove(name1);
printf("**************************************************************\n");
printf(" 班级删除成功。 \n");
printf("**************************************************************\n\n");
}

void change_proj()
{
FILE * fp;
char proj[6][20];
printf("现在的科目信息为:\n\n");
fp = fopen("proj", "r");
fscanf(fp, "%s%s%s%s%s%s", proj[0], proj[1], proj[2], proj[3], proj[4], proj[5]);
//fclose(fp);
// fclose(fp);
printf("%s %s %s %s %s %s", proj[0], proj[1], proj[2], proj[3], proj[4], proj[5]);

printf("\n\n");
printf("请输入您修改后的科目:\n\n");
//getchar();
scanf( "%s%s%s%s%s%s", proj[0], proj[1], proj[2], proj[3], proj[4], proj[5]);
printf("\n\n");
fp = fopen("proj", "w");
fprintf(fp, "%s %s %s %s %s %s", proj[0], proj[1], proj[2], proj[3], proj[4], proj[5]);
fclose(fp);
printf("**************************************************************\n");
printf(" 科目修改成功。 \n");
printf("**************************************************************\n\n");

}

/**************************************************************************学生管理***********************************/
int m_stu_can_do()
{
int d;
printf("您可以进行的操作有:\n\n");
printf("1 登记 2 修改 3 删除某个学生 4 删除某班学生\n\n5 登记分数 6 修改分数 7 返回上一层\n\n8 退出\n\n");
printf("请您输入:");
scanf("%d", &d);
printf("\n\n");
while(1 != d && 2 != d && 3 != d && 4 != d && 5 != d && 6 != d && 7 != d)
{
printf("您的输入有误,请重新输入:");
scanf("%d", &d);
printf("\n\n");

}
return d;
}

void manage_stu()
{
int does;
does = m_stu_can_do();
while(true)
{
if(1 == does)
{
log_stu();
does = m_stu_can_do();
}
if(2 == does)
{
change_stu();
does = m_stu_can_do();
}
if(3 == does)
{
del_stu();
does = m_stu_can_do();
}
if(4 == does)
{
del_clas_stu();
does = m_stu_can_do();
}
if(5 == does)
{
log_score();
does = m_stu_can_do();
}
if(6 == does)
{
change_score();
does = m_stu_can_do();
}
if(7 == does)
{
return;
}
if(8 == does)
{
exit(0);
}
}
}

void log_stu()
{
FILE * fp, * p;
char clas[20], clas1[20];
stu1 add[200];
int i = 0;
printf("请输入您所要添加学生所在班级:");
scanf("%s", clas);
printf("\n\n");
while(!(fp = fopen(clas, "r")))
{
printf("您输入的班级不存在,请重新输入:");
scanf("%s", clas);
printf("\n\n");
}
fclose(fp);
sprintf(clas1, "%s_score", clas);
printf("请按下面提示输入(输入0结束):\n\n");
printf("学号 姓名 性别 年龄 电话\n\n");
scanf("%d", & add[i]. num);
while(add[i]. num != 0)
{
scanf("%s%s%s%s", add[i]. name, add[i]. sex, add[i]. age, add[i]. phone);
i ++;
printf("\n");
scanf("%d", & add[i]. num);
}
i = 0;
fp = fopen(clas, "a");
p = fopen(clas1, "a");
while(add[i]. num != 0)
{
fprintf(fp, "%d %s %s %s %s\n\n", add[i]. num, add[i]. name, add[i]. sex, add[i]. age, add[i]. phone);
fprintf(p, "0 0 0 0 0 0\n\n");
i++;
}
fclose(fp);
fclose(p);
printf("**************************************************************\n");
printf(" 添加成功。 \n");
printf("**************************************************************\n\n");
}

void change_stu()
{
FILE * fp;
char clas[20];
int num, result, i;
stu1 stu[200];
//sstu2 stud[200];
printf("请输入他所在班级:");
scanf("%s", clas);
printf("\n\n");
while(!(fp = fopen(clas, "r")))
{
printf("您输入的班级不存在,请重新输入:");
scanf("%s", clas);
printf("\n\n");
}
fclose(fp);
// sprintf(clas1"%s_score", clas);
read_stu1(clas, stu);
//read_stud(cls1, stud);
printf("请输入该学生学号:");
scanf("%d", &num);
printf("\n\n");
result = find_stu(stu, num);
if(-1 == result)
{
printf("您输入的学生不存在,请重新输入:");
scanf("%d", & num);
printf("\n\n");
result = find_stu(stu, num);
}
printf("请按下面格式重新输入该学生信息:\n\n");
printf("学号 姓名 性别 年龄 电话\n\n");
scanf("%d%s%s%s%s", & stu[result]. num, stu[result]. name, stu[result]. sex, stu[result]. age, stu[result]. phone);
i = 0;
fp = fopen(clas, "w");
while(0 != stu[i]. num)
{
fprintf(fp, "%d %s %s %s %s\n\n", stu[i]. num, stu[i]. name, stu[i]. sex, stu[i]. age, stu[i]. phone);
i++;
}
fclose(fp);
printf("**************************************************************\n");
printf(" 修改成功。 \n");
printf("**************************************************************\n\n");
}

void read_stu1(char clas[], stu1 stu[])
{
int i = 0;
FILE * fp;
fp = fopen(clas, "r");
while(!feof(fp))
{
fscanf(fp, "%d%s%s%s%s", &stu[i]. num, stu[i]. name, stu[i]. sex, stu[i]. age, stu[i]. phone);
i++;
}
fclose(fp);
stu[i-1]. num = 0;
}

int find_stu(stu1 stu[], int num)
{
int i = 0;
while(stu[i]. num != 0)
{
if(stu[i]. num == num)
{
break;
}
i++;
}
if(stu[i]. num == num)
{
return i;
}
else
{
return -1;
}
}

void del_stu()
{
FILE * fp, * p;
char clas[20], clas1[20];
int num, result, i = 0;
stu1 stu[200];
stu2 stud[200];
printf("请输入他所在班级:");
scanf("%s", clas);
printf("\n\n");
while(!(fp = fopen(clas, "r")))
{
printf("您输入的班级不存在,请重新输入:");
scanf("%s", clas);
printf("\n\n");
}
fclose(fp);
sprintf(clas1, "%s_score", clas);
read_stu1(clas, stu);
read_stu2(clas1, stud);
printf("请输入该学生学号:");
scanf("%d",& num);
printf("\n\n");
result = find_stu(stu, num);
if(-1 == result)
{
printf("您输入的学生不存在,请重新输入:");
scanf("%d", & num);
printf("\n\n");
result = find_stu(stu, num);
}
fp = fopen(clas, "w");
p = fopen(clas1, "w");
while(stu[i]. num != 0)
{
if(stu[i]. num == num)
{
i++;
}
if(stu[i]. num != 0)
{
fprintf(fp, "%d %s %s %s %s\n\n", stu[i]. num, stu[i]. name, stu[i]. sex, stu[i]. age, stu[i]. phone);
fprintf(p, "%d %d %d %d %d %d\n\n", stud[i]. proj1, stud[i]. proj2, stud[i]. proj3, stud[i]. proj4, stud[i]. proj5, stud[i]. proj6);
i++;
}
}
fclose(fp);
fclose(p);
printf("**************************************************************\n");
printf(" 删除成功。 \n");
printf("**************************************************************\n\n");
}

void read_stu2(char clas1[], stu2 stud[])
{
int i = 0;
FILE * fp;
fp = fopen(clas1, "r");
while(!feof(fp))
{
fscanf(fp, "%d%d%d%d%d%d",&stud[i]. proj1, &stud[i]. proj2, &stud[i]. proj3, &stud[i]. proj4, &stud[i]. proj5, &stud[i]. proj6);
i++;
}
stud[i-1]. proj1 = -1;
fclose(fp);
}

void log_score()
{
FILE * fp, * p, * tp;
stu1 stu[200];
stu2 stud;
char clas[20], clas1[20], proj[6][20];
int i = 0;
printf("请输入要登分的班级:");
scanf("%s", clas);
printf("\n\n");
while(!(fp = fopen(clas, "r")))
{
printf("您输入的班级不存在,请重新输入:");
scanf("%s", clas);
printf("\n\n");
}
fclose(fp);
tp = fopen("proj", "r");
fscanf(tp, "%s%s%s%s%s%s", proj[0], proj[1], proj[2], proj[3], proj[4], proj[5]);
fclose(tp);
sprintf(clas1, "%s_score", clas);
read_stu1(clas, stu);
fp = fopen(clas, "r");
p = fopen(clas1, "w");

printf("请输入:\n\n");
printf("学号 姓名 %s %s %s %s %s %s\n\n", proj[0], proj[1], proj[2], proj[3], proj[4], proj[5]);
while(0 != stu[i]. num)
{
printf("%d %s ", stu[i]. num, stu[i]. name);
scanf("%d%d%d%d%d%d", &stud. proj1, &stud. proj2, &stud. proj3, &stud. proj4, &stud. proj5, &stud. proj6);
fprintf(p, "%d %d %d %d %d %d\n\n", stud.proj1 ,stud.proj2 ,stud.proj3 ,stud.proj4 ,stud.proj5 ,stud.proj6);
i++;
}
fclose(fp);
fclose(p);
printf("**************************************************************\n");
printf(" 该班所有学生成绩已登记完毕。 \n");
printf("**************************************************************\n\n");
}

void change_score()
{
FILE * fp, * temp;
char clas[20], clas1[20], proj[6][20];
int num, result, i = 0;
stu1 stu[200];
stu2 stud[200];
printf("请输入他所在班级:");
scanf("%s", clas);
printf("\n\n");
while(!(fp = fopen(clas, "r")))
{
printf("您输入的班级不存在,请重新输入:");
scanf("%s", clas);
printf("\n\n");
}
fclose(fp);
sprintf(clas1, "%s_score", clas);
read_stu1(clas, stu);
//read_stu2(cls1, stud);
printf("请输入该学生学号:");
scanf("%d",& num);
printf("\n\n");
result = find_stu(stu, num);
if(-1 == result)
{
printf("您输入的学生不存在,请重新输入:");
scanf("%d", & num);
printf("\n\n");
result = find_stu(stu, num);
}
temp = fopen("proj", "r");
fscanf(temp, "%s%s%s%s%s%s", proj[1], proj[2], proj[3], proj[4], proj[5], proj[6]);
fclose(temp);
fp = fopen(clas1, "w");
printf("请输入:\n\n");
printf("学号 姓名 %s %s %s %s %s %s", proj[1], proj[2], proj[3], proj[4], proj[5], proj[6]);
printf("%d %s ", stu[result]. num, stu[result]. name);
scanf("%d%d%d%d%d%d", &stud[result]. proj1, &stud[result]. proj2, &stud[result]. proj3, &stud[result]. proj4, &stud[result]. proj5, &stud[result]. proj6);
while(0 != stud[i]. proj1)
{
fprintf(fp,"%d %d %d %d %d %d\n\n", stud[i]. proj1, stud[i]. proj2, stud[i]. proj3, stud[i]. proj4, stud[i]. proj5, stud[i]. proj6);
i++;
}
printf("**************************************************************\n");
printf(" 成绩修改成功。 \n");
printf("**************************************************************\n\n");
}

void del_clas_stu()
{
FILE * fp;
char clas[20], clas1[20];
printf("请输入您想要操作的班级:");
scanf("%s", clas);
printf("\n\n");
while(!(fp = fopen(clas, "r")))
{
printf("不存在%s班,请重新输入:");
scanf("%s", clas);
printf("\n\n");
}
sprintf(clas1, "%s_score", clas);
fp = fopen(clas, "w");
fclose(fp);
fp = fopen(clas1, "w");
fclose(fp);
printf("*************************************************************\n");
printf(" 删除成功。 \n");
printf("*************************************************************\n\n");
}

/**********************************************查询**********************************************************/
int m_find_can_do()
{
int d;
printf("您可以进行的操作为:\n\n1 查看某班基本信息 2 查看某班成绩 3 查看学生基本信息\n\n4 查看学生全部信息 5 返回上一层 6 退出\n\n请您输入:");
scanf("%d", &d);
printf("\n\n");
while(1 != d && 1 != d && 2 != d && 3 != d && 4 != d && 5 != d && 6 != d)
{
printf("您的输入有误,请重新输入:");
scanf("%d", &d);
printf("\n\n");

}
return d;
}

void find()
{
int does;
does = m_find_can_do();
while(true)
{
if(1 == does)
{
find_clas_basic();
does = m_find_can_do();
}
if(2 == does)
{
find_clas_score();
does = m_find_can_do();
}
if(3 == does)
{
find_stu_basic();
does = m_find_can_do();
}
if(4 == does)
{
find_stu_all();
does = m_find_can_do();
}
if(5 == does)
{
return ;
}
if(6 == does)
{
exit(0);
}

}
}

void find_clas_basic()
{
FILE * fp;
stu1 stu[200];
char clas[20];
int i = 0, d;
printf("请输入您想要查看的班级:");
scanf("%s", clas);
printf("\n\n");
while(!(fp = fopen(clas, "r")))
{
printf("您输入的班级不存在,请重新输入:");
scanf("%s", clas);
printf("\n\n");
}
fscanf(fp, "%d", &d);

if(feof(fp))
{
printf("**************************************************************\n");
printf(" 您查看的班级没有学生。 \n");
printf("**************************************************************\n");
fclose(fp);
return ;
}
read_stu1(clas, stu);
printf("学号 姓名 性别 年龄 电话\n\n");
while(0 != stu[i]. num)
{
printf("%d %s %s %s %s\n\n", stu[i]. num, stu[i]. name, stu[i]. sex, stu[i]. age, stu[i]. phone);
i++;
}
}

void find_clas_score()
{
FILE * fp, * temp;
stu1 stu[200];
stu2 stud[200];
char clas[20], clas1[20], proj[6][20];
int i = 0, d;
printf("请输入您想要查看的班级:");
scanf("%s", clas);
printf("\n\n");
while(!(fp = fopen(clas, "r")))
{
printf("您输入的班级不存在,请重新输入:");
scanf("%s", clas);
printf("\n\n");
}
fscanf(fp, "%d", &d);
if(feof(fp))
{
printf("**************************************************************\n");
printf(" 您查看的班级没有学生。 \n");
printf("**************************************************************\n\n");
fclose(fp);
return ;
}
fclose(fp);
sprintf(clas1, "%s_score", clas);
read_stu1(clas, stu);
read_stu2(clas1, stud);
temp = fopen("proj", "r");
fscanf(temp, "%s%s%s%s%s%s", proj[0], proj[1], proj[2], proj[3], proj[4], proj[5]);
fclose(temp);
printf("学号 姓名 %s %s %s %s %s %s\n\n", proj[0], proj[1], proj[2], proj[3], proj[4], proj[5]);
while(0 != stu[i]. num)
{
printf("%d %s ", stu[i]. num, stu[i]. name);
printf("%d %d %d %d %d %d\n\n", stud[i].proj1, stud[i].proj2, stud[i].proj3, stud[i].proj4, stud[i].proj5, stud[i].proj6);
i++;
}
}

void find_stu_basic()
{
stu1 stu[200];
int result, num;
char clas[20];
FILE * fp;
printf("请输入他所在班级:");
scanf("%s", clas);
printf("\n\n");
while(!(fp = fopen(clas, "r")))
{
printf("您输入的班级不存在,请重新输入:");
scanf("%s", clas);
printf("\n\n");
}
fclose(fp);
read_stu1(clas, stu);
printf("请输入该学生学号:");
scanf("%d", & num);
printf("\n\n");
result = find_stu(stu, num);
while(-1 == result)
{
printf("该学生不存在,请重新输入:");
scanf("%d", &num);
printf("\n\n");
}
printf("该学生信息为:\n\n学号 姓名 性别 年龄 电话\n\n");
printf("%d %s %s %s %s\n\n", stu[result]. num, stu[result]. name, stu[result]. sex, stu[result]. age, stu[result]. phone);
}

void find_stu_all()
{
stu1 stu[200];
stu2 stud[200];
int result, num;
char clas[20], clas1[20], proj[6][20];
FILE * fp, * temp;
printf("请输入他所在班级:");
scanf("%s", clas);
printf("\n\n");
while(!(fp = fopen(clas, "r")))
{
printf("您输入的班级不存在,请重新输入:");
scanf("%s", clas);
printf("\n\n");
}
fclose(fp);
sprintf(clas1, "%s_score", clas);
read_stu1(clas, stu);
read_stu2(clas1, stud);
printf("请输入该学生学号:");
scanf("%d", & num);
printf("\n\n");
result = find_stu(stu, num);
while(-1 == result)
{
printf("该学生不存在,请重新输入:");
scanf("%d", &num);
printf("\n\n");
}
temp = fopen("proj", "r");
fscanf(temp, "%s%s%s%s%s%s", proj[0], proj[1], proj[2], proj[3], proj[4], proj[5]);
fclose(temp);
printf("该学生全部信息如下:\n\n");
printf("该学生信息为:\n\n学号 姓名 性别 年龄 电话\n\n");
printf("%d %s %s %s %s\n\n", stu[result]. num, stu[result]. name, stu[result]. sex, stu[result]. age, stu[result]. phone);
printf("成绩:\n\n");
printf("%s %s %s %s %s %s\n\n", proj[0], proj[1], proj[2], proj[3], proj[4], proj[5]);
printf("%d %d %d %d %d %d\n\n", stud[result]. proj1, stud[result]. proj2, stud[result]. proj3, stud[result]. proj4, stud[result]. proj5, stud[result]. proj6);
}本回答被网友采纳
第2个回答  2010-08-24
又见这种问题。。。
知道里很少会有人给答案
去别的地方下个类似的改下 就是了
第3个回答  2010-08-25
出10个悬赏分是很难求到的~~况且程序这个东西要自己编了才深刻啊
第4个回答  2010-08-24
也是 我也做过的
相似回答