c语言学生成绩管理系统,c语言学生成绩管理系统删除学生成绩
用C语言设计一个学生成绩管理系统
#include stdio.h
#include string.h
#include stdlib.h
#define?MAX?1000
/*定义学生成绩信息结构*/
struct stu
{
char id[8];
char name[8];
扩展资料:
short:修饰int,短整型数据,可省略被修饰的int。(KR时期引入)
long:修饰int,长整型数据,可省略被修饰的int。(KR时期引入)
long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)
signed:修饰整型数据,有符号数据类型。(C89标准新增)
unsigned:修饰整型数据,无符号数据类型。(KR时期引入)
restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。(C99标准新增)
复杂类型关键字
struct:结构体声明。(KR时期引入)
union:联合体声明。(KR时期引入)
enum:枚举声明。(C89标准新增)
typedef:声明类型别名。(KR时期引入)
sizeof:得到特定类型或特定类型变量的大小。(KR时期引入)
inline:内联函数用于取代宏定义,会在任何调用它的地方展开。(C99标准新增)
参考资料来源:百度百科-c语言
怎样用C语言写学生成绩管理系统?
程序如下: #include\x0d\x0avoid main()\x0d\x0a{\x0d\x0a float student[100][7];\x0d\x0a//student[][0]存放学号,student[][1]到student[][4]存放四门成绩,\x0d\x0a//student[][5]存放总分,student[][6]存放平均分,student[][7]存放排名\x0d\x0a int n,i,j,k,p,t,count,flag;\x0d\x0a int a[100],b[100],c[100];\x0d\x0a//a[]存放排序后的下标,b[]存放总分(备份),c[]存放排名的数据\x0d\x0a printf("输入学生的个数:\n");\x0d\x0a scanf("%d",n);\x0d\x0a for(i=0;ib[i+1])\x0d\x0a {\x0d\x0a c[i]=count;\x0d\x0a count++;\x0d\x0a }\x0d\x0a }\x0d\x0a printf("\n以下是统计结果:\n");\x0d\x0a printf("学号 s[1] s[2] s[3] s[4] 总分 平均分 排名\n");\x0d\x0a for(i=0;i
回答于?2022-11-16
C语言实现 学生成绩管理系统(超详细) 内附源码
#includestdio.h
#includestring.h
#includestdlib.h
#includeconio.h
#define N 50//定义的学生数组的个数
#define M 1//定义的管理员数组的个数
int k;//录入学生的个数
char read_door[20];//读取文件的"门"
void Add_data(int flag);//增加数据
void Count_score(int flag);//求平均成绩和总成绩
void Delete_data(int flag);//根据学号删除对应学生的成绩
int Landing(int key);//登录程序
void Load_data();//载入数据
void Updata_stu(int flag);
void Read_bigdoor(char *b);
void Rank_score(int way, int flag);//按照需求对对应的成绩排序
void Read_data(char read_door);//读取数据
void Read_door();//读取"门"值
void Read_main_flag(int *a);
void Read_k();
void Save_bigdoor(char *b);
void Save_data(int flag);//保存数据
void Save_door();//保存"门"值
void Save_main_flag(int *a);
void Save_k(int k);
void Screen_rank();
void Screen_search();
void Screen_stu();
void Screen_teacher();
void Screen_stu_teach();
void Screen_onlyteach();
void Search_data(int way, int flag);//按学号或姓名查找查找
static struct STUDENT//学生的信息
{
char num[10];
char name[10];
float score[3];
float sum;
float aver;
int rank[4];
}stu[N];
static struct TEACHER//教师的登录账号和密码
{
char num[10];
char code[10];
}teach[M] = { "18061124","991228" };
int main()
{
char bigdoor ='n';//教师可通过bigdoor控制学生的权限
char *c=bigdoor;
int order1, order2, order3;//order为用户登录的指令
int door1, door2, door3;
printf ("请输入管理员登录指令:\n");
gets(read_door);
if (strcmp(read_door,"Lu Chen")==0)
{
printf("欢迎使用,您目前是拥有最高权限的管理员,请输入您的账号和密码:\n\n");
printf("\n\n\n");
Screen_onlyteach();
door1 = Landing(1);
if (door1 == 2)
{
printf("\n账号或密码不正确");
return 0;
}
}
else
{
Screen_stu_teach();
printf("请输入序号即选择登录选项:");
scanf("%d", order1);
printf("\n\n");
door1 = Landing(order1);//door1确定用户的权限
switch (door1)//提示用户输入出错
{
case 1:
case 3: break;
case 2:printf("\n输入的账号或密码有误"); return 0;
case 4:printf("\n输入的号码有误"); return 0;
}
}
if (door1 == 1)//老师界面
{
int flag = 0;
int *p=flag;
char teach_read_key;
printf("\n是否读取数据?(y/n):");
scanf("%*c%c",teach_read_key);
if(teach_read_key=='y')
{
Read_k();
? ? Read_door();
Read_main_flag(p);
Read_data(read_door[20]);
}
printf("\n\n");
for (int count = 1; count 0; count++)//利用死循环来重复使用功能
{
Screen_teacher();
printf("\n请输入序号即选择登录选项:");
scanf("%d", order2);
printf("\n\n");
if (order2 == 10)
break;
switch (order2)
{
case 1:
{
Load_data();
flag=1;
Save_main_flag(p);
Save_k(k);
}break;
case 2:Updata_stu(flag); break;
case 3:
{
Screen_search();
printf("请输入你想查询成绩的方式:");
scanf("%d", door2);
Search_data(door2, flag);
}break;
case 4:Add_data(flag);break;
case 5:Delete_data(flag);break;
case 6:
{
Screen_rank();
printf("请输入成绩序号来选择排序:");
scanf("%d", door2);
Rank_score(door2, flag);
} break;
case 7:
{
Save_data(flag);
Save_door();
Save_k(k);
} break;
case 8:
{
bigdoor ='n';
Save_bigdoor(c);
}break;
case 9:
{
bigdoor ='y';
Save_bigdoor(c);
? }break;
default:printf("您输入的序号有误!\n\n");
}
}
}
else//学生界面
{
Read_k();
Read_data('y');
for (int k = 1; k 0; k++)
{
Screen_stu();
printf("请输入下一步操作的序号:");
scanf("%d", order3);
if (order3 == 3)
break;
switch (order3)
{
case 1:
{
Screen_search();
printf("请输入你想查询成绩的方式");
scanf("%d", door3);
Search_data(door3, 1);
}break;
case 2:
{
Screen_rank();
printf("请输入成绩序号来选择排序:");
scanf("%d", door3);
Rank_score(door3, 1);
}break;
default:printf("输入的操作序号有误\n\n");
}
}
}
return 0;
}
int Landing(int key)//登录程序
{
char num[10];
char code[10];
if (key == 1)
{
printf("请输入账号:");
scanf("%s", num);
printf("\n请输入密码:");
scanf("%s", code);
for (int i = 0; i M; i++)
if (strcmp(teach[i].num, num) == 0 strcmp(teach[i].code, code) == 0)//判断登陆账号和密码是否正确
return 1;
else
return 2;
}
else if (key == 2)
{
return 3;
}
else
{
return 4;
}
}
void Search_data(int way, int flag)//按学号或姓名查找查找
{
int Search_flag = 1;
if (flag)
{
char num[10], name[10];
int i;
if (way == 1)
{
printf("\n请输入学号:");
scanf("%s", num);
for (i = 0; i k; i++)
{
if (strcmp(stu[i].num, num) == 0)//判断学号存不存在
{
printf("\n姓名:%s\n学号:%s\nsubject1:%f\nsubject2:%f\nsubject3:%f\nsum:%f\naver:%f\n", stu[i].name, stu[i].num, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum, stu[i].aver);
Search_flag = 0;
break;
}
}
if (Search_flag)
printf("\n您输入的学号有误\n");
}
else if (way == 2)
{
printf("\n请输入姓名:");
scanf("%s", name);
for (i = 0; i N; i++)
{
if (strcmp(stu[i].name, name) == 0)//判断姓名存不存在
{
printf("\n姓名:%s\n学号:%s\nsubject1:%f\nsubject2:%f\nsubject3:%f\nsum:%f\naver:%f\n", stu[i].name, stu[i].num, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum, stu[i].aver);
flag = 0;
break;
}
}
if (flag)
printf("\n输入的姓名有误\n");
}
else
printf("\n输入的序号有误\n");
}
else
{
printf("\n您还没有载入数据\n");
}
}
void Count_score(int flag)//求平均成绩和总成绩
{
if (flag)
{
for (int i = 0; i k; i++)
{
stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
stu[i].aver = stu[i].sum / 3;
}
}
else
{
printf("\n您还没有载入数据\n");
}
}
void Load_data()//载入数据
{
printf("输入录入学生成绩个数:");
scanf("%d", k);
for (int i = 0; i k; i++)
{
scanf("%s%s%f%f%f", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
Count_score(1);
}
}
void Rank_score(int way, int flag)//按照需求对对应的成绩排序
{
int i, j, n, temp;
if (flag)
{
for (i = 0; i 4; i++)
for (j = 0; j k; j++)
stu[j].rank[i] = j + 1;
if (way == 1)
{
for (i = 0; i 3; i++)
for (j = 0; j k; j++)
for (n = j + 1; n k; n++)
if (stu[j].score[i] stu[n].score[i])
{
temp = stu[j].rank[i];
stu[j].rank[i] = stu[n].rank[i];
stu[n].rank[i] = temp;
}
printf("\n");
for (i = 0; i k; i++)
printf("姓名:%s 学号:%s subject1:%d subject2:%d subject3:%d\n", stu[i].name, stu[i].num, stu[i].rank[0], stu[i].rank[1], stu[i].rank[2]);
}
else if (way == 2)
{
for (j = 0; j k; j++)
for (n = j + 1; n k; n++)
if (stu[j].sum stu[n].sum)
{
temp = stu[j].rank[3];
stu[j].rank[3] = stu[n].rank[3];
stu[n].rank[3] = temp;
}
printf("\n");
for (i = 0; i k; i++)
printf("姓名:%s 学号:%s sum: %d\n", stu[i].name, stu[i].num, stu[i].rank[3]);
}
else
{
printf("\n输入的序号有误\n");
}
}
else
{
printf("\n您还没有载入数据\n");
}
}
void Delete_data(int flag)//根据学号删除对应学生的成绩
{
if (flag)
{
int i, j;
char num[10];
printf("\n请输入您想要删除信息的学号:");
scanf("%s", num);
for (i = 0; i k; i++)
{
if (strcmp(stu[i].num, num) == 0)
for (j = i + 1; j k; j++)
{
stu[i] = stu[j];
Count_score(1);
}
}
k--;
Save_k(k);
}
else
{
printf("\n您还没有载入数据\n");
}
}
void Updata_stu(int flag)//根据学号修改学生的成绩
{
int Updata_flag = 1;
if (flag)
{
char num[10];
float subject1, subject2, subject3;
printf("\n请输入您想要修改学生的学号:");
scanf("%s", num);
printf("\n请输入您想要更改的学生三科的成绩:");
scanf("%f%f%f", subject1, subject2, subject3);
for (int i = 0; i k; i++)
if (strcmp(stu[i].num, num) == 0)
{
stu[i].score[0] = subject1;
stu[i].score[1] = subject2;
stu[i].score[2] = subject3;
Updata_flag = 0;
Count_score(1);
}
if (Updata_flag)
{
printf("\n输入学号有误\n");
}
}
else
{
printf("\n您还没有载入数据\n");
}
}
void Save_data(int flag)//保存数据
{
if(flag)
{
FILE *fp;
if((fp=fopen("load.txt","w"))==NULL)
{
printf("Save_data error!");
exit(0);
}
for(int i=0;ik;i++)
{
fwrite(stu[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
printf("成功保存数据!\n\n");
read_door[20]='y';
}
else
{
printf("\n您还没有载入数据\n");
}
}
void Read_data(char read_door)//读取数据
{
if(read_door=='y')
{
FILE *fp;
if((fp=fopen("load.txt","r"))==NULL)
{
printf("Read_data error!");
exit(0);
}
for(int i=0;ik;i++)
{
fread(stu[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
}
else
{
printf("\n没有保存数据的记录\n");
}
}
void Save_door()//保存"门"值
{
FILE *fp;
if((fp=fopen("door.txt","w"))==NULL)
{
printf("Save_door error!");
exit(0);
}
fputc(read_door[20],fp);
fclose(fp);
}
void Read_door()//读取"门"值
{
FILE *fp;
if((fp=fopen("door.txt","r"))==NULL)
{
printf("Read_door error!");
exit(0);
}
read_door[20]=fgetc(fp);
fclose(fp);
}
void Save_main_flag(int *a)
{
FILE *fp;
if((fp=fopen("flag.txt","w"))==NULL)
{
printf("Save_main_flag error!");
exit(0);
}
fprintf(fp,"%d",*a);
fclose(fp);
}
void Read_main_flag(int *a)
{
FILE *fp;
if((fp=fopen("flag.txt","r"))==NULL)
{
printf("Read_main_flag error!");
exit(0);
}
fscanf(fp,"%d",a);
fclose(fp);
}
void Save_bigdoor(char *b)
{
FILE *fp;
if((fp=fopen("bigdoor.txt","w"))==0)
{
printf("Save_bigdoor error!");
exit(0);
}
fputc(*b,fp);
fclose(fp);
}
void Read_bigdoor(char *b)
{
FILE *fp;
if((fp=fopen("bigdoor.txt","r"))==0)
{
printf("Read_bigdoor error!");
exit(0);
}
*b=fgetc(fp);
fclose(fp);
}
void Save_k(int k)
{
FILE *fp;
if((fp=fopen("k.txt","w"))==0)
{
printf("Save_k error!");
exit(0);
}
fprintf(fp,"%d",k);
fclose(fp);
}
void Read_k()
{
FILE *fp;
if((fp=fopen("k.txt","r"))==0)
{
printf("Read_k error!");
exit(0);
}
fscanf(fp,"%d",k);
fclose(fp);
}
void Add_data(int flag)//增加数据
{
int i, j,count=k;
char num[10], name[10];
float subject1, subject2, subject3;
if (flag)
{
printf("\n输入您想增加的数据条数:");
scanf("%d", i);
for (j = 0; j i; j++)
{
printf("\n输入增加的学生学号,姓名,三门科目成绩");
scanf("%s%s%f%f%f", num, name, subject1, subject2, subject3);
strcpy(stu[count + j].num, num);
strcpy(stu[count+ j].name, name);
stu[count+ j].score[0] = subject1;
stu[count + j].score[1] = subject2;
stu[count+ j].score[2] = subject3;
k++;
Count_score(1);
}
Save_k(k);
}
else
{
printf("\n输入您想增加的数据条数:");
scanf("%d", i);
for (j = 0; j i; j++)
{
printf("\n输入增加的学生学号,姓名,三门科目成绩");
scanf("%s%s%f%f%f", num, name, subject1, subject2, subject3);
strcpy(stu[j].num, num);
strcpy(stu[j].name, name);
stu[j].score[0] = subject1;
stu[j].score[1] = subject2;
stu[j].score[2] = subject3;
k++;
Count_score(1);
}
}
}
void Screen_search()//查询界面
{
printf("*****************学生成绩查询界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ①? 学生学号查询? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ②? 学生姓名查询? ? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
void Screen_rank()//成绩排名方式界面
{
printf("*****************学生成绩排名界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ①? ? subject? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ②? ? ? sum? ? ? ? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
void Screen_teacher()
{
printf("*****************教师管理操作界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ①? ? 数据载入? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ②? ? 修改数据? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ③? ? 查询数据? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ④? ? 添加数据? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑤? ? 删除数据? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑥? ? 成绩排序? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑦? ? 保存数据? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑧? ? 学生限制? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑨? ? 学生开放? ? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ⑩? ? ? 退出? ? ? ? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
void Screen_stu_teach()
{
printf("*****************学生成绩管理系统*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ① 教师管理员登录? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ②? 学生端登录? ? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
void Screen_onlyteach()
{
printf("*****************教师登陆操作界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ① 教师管理员登录? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
void Screen_stu()
{
printf("*****************学生用户操作界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("|? ? ? ? ? ? ? ①? 学生成绩查询? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ②? 成绩排名查询? ? ? ? ? ? ? ? ? ? |\n");
printf("|? ? ? ? ? ? ? ③? ? ? 退出? ? ? ? ? ? ? ? ? ? ? ? |\n");
printf("——————————————————————————\n");
}
以上内容仅是本人通过多方浏览网上资料,自己敲出来的。
如有问题,大家可以在评论区下方留言!!!
本人已亲测,可用
c语言编写查询学生成绩管理程序。
#includestdio.h
#includestdlib.h
#includestring.hstruct record
{
char xuehao[10];//学号
char name[20]; //姓名
char sex[3];//性别
int ke1;//数学
int ke2 ;//语文
int ke3;//英语
int pin;
}stu[50];
int k=1,n,m;void readfile();
void seek();
void insert();
void del();
void save();
void menu();
void seek()
{int i,j,item,flag;brchar s1[20];brprintf("------------------\n");brprintf("1.按学号查询\n");brprintf("2.退出本菜单\n");brprintf("------------------\n");brwhile(1)br{ printf("请选择子菜单编号:");brscanf("%d",item);brflag=0;brswitch(item)br{brcase 1:brprintf("请输入要查询的学生的学号:\n");brscanf("%s",s1);brfor(i=0;in;i++)brif(strcmp(stu[i].xuehao,s1)==0)br{ flag=1;brprintf("该学生学号,姓名,性别,数学,语文,英语 分别为:\n");brprintf(" %s %s %s %d %d %d",stu[i].xuehao,stu[i].name,brstu[i].sex,stu[i].ke1,stu[i].ke2,stu[i].ke3);br}
if(flag==0)
printf("该学号不存在!\n"); break;
case 2:return;
default:printf("请在1-2之间选择\n");
}
}
}
void insert()
{ int i=n,j,flag;
printf("请输入待增加的学生数:\n");
scanf("%d",m);
do
{ flag=1;
while(flag)
{ flag=0;
printf("请输入第 %d 个学生的学号:\n",i+1);
scanf("%s",stu[i].xuehao);
for(j=0;ji;j++)
if(strcmp(stu[i].xuehao,stu[j].xuehao)==0)
{ printf("已有该学号,请检查后重新录入!\n");
flag=1;
break;
}
}
printf("请输入第 %d 个学生的姓名:",i+1);
scanf("%s",stu[i].name);
printf("\n请输入第 %d 个学生的性别:",i+1);
scanf("%s",stu[i].sex);
printf("\n请输入第 %d 个学生的数学成绩:",i+1);
scanf("%d",stu[i].ke1);
printf("\n请输入第 %d 个学生的语文成绩:",i+1);
scanf("%d",stu[i].ke2);
printf("\n请输入第 %d 个学生的英语成绩:",i+1);
scanf("%d",stu[i].ke3);if(flag==0)
{ i=i;
i++;
}
}while(in+m);
n+=m;
printf("录入完毕!\n\n");
}void del()
{ int i,j,flag=0;
char s1[20];
printf("请输入要删除学生的学号:\n");
scanf("%s",s1);
for(i=0;in;i++)
if(strcmp(stu[i].xuehao,s1)==0)
{ flag=1;
for(j=i;jn-1;j++)
stu[j]=stu[j+1];
}
if(flag==0)
printf("该学号不存在!\n");
if(flag==1)
{ printf("删除成功,显示结果请选择菜单6\n");
n--;
}
}
void readfile()
{
char buf[80],*p="student.dat";
FILE *fp;
int i=0;
if ((fp=fopen("student.dat","r"))==NULL)
{ printf("Open file %s error! Strike any key to exit!",p);
system("pause");
exit(0);
}
while(fscanf(fp,"%s%s%s%d%d%d",stu[i].xuehao,stu[i].name,
stu[i].sex,stu[i].ke1,stu[i].ke2,stu[i].ke3)==6)
{ i++;
i=i;
}
fclose(fp);
n=i;
printf("录入完毕!\n");
}void save()
{ int i,j,k,flag=0;
FILE *fp;
fp=fopen("student.dat","w");
for(i=0;im;i++)
{
fprintf(fp,"%s%s%d%d%d",stu[i].xuehao,stu[i].name,stu[i].sex,stu[i].ke1,
stu[i].ke2,stu[i].ke3);
fclose(fp);
printf("已储存");
}
}
void paixu()
{
int i,j,k,t;
for(i=0;im;i++)
{
stu[i].pin=(stu[i].ke1+stu[i].ke2+stu[i].ke3)/3;
}
for(i=0;i=m-2;i++)
{
k=i;
for(j=i+1;j=m-1;j++)
if(stu[j].pinstu[k].pin)
k=j;
if(k!=i)
{
t=stu[k].pin;
stu[k].pin=stu[i].pin;
stu[i].pin=t;
}
}
for(i=0;im;i++)
{printf("第 %d 个学生的姓名%s:",i+1,stu[i].name);br printf("\n第 %d 个学生的性别:%s",i+1,stu[i].sex);br printf("\n第 %d 个学生的数学成绩:%d",i+1,stu[i].ke1);br printf("\n第 %d 个学生的语文成绩:%d",i+1,stu[i].ke2);br printf("\n第 %d 个学生的英语成绩:%d",i+1,stu[i].ke3);br printf("\n第 %d 个学生的平均成绩:%d",i+1,stu[i].pin);br }
}
void menu()
{ int nub;
printf(" \n\n学生成绩管理系统\n\n");
printf("*****系统功能菜单*****\n");
printf("----------------------\n");
printf("1.输入学生信息\n");
printf("2.查询学生信息\n");
printf("3.按学号删除信息\n");
printf("4.读入学生信息\n");
printf("5.保存信息(要把修改保存到文件,退出程序前必须执行本项)\n");
printf("6.查询学生平均成绩信息\n");
printf("0.退出系统\n");
printf("----------------------\n");
printf("请选择菜单编号:");
scanf("%d",nub);
switch(nub)
{
case 1:insert();break;
case 2:seek();break;
case 3:del();break;
case 4:readfile();break;
case 5:save();break;
case 6:paixu();break;
case 0:k=0;break;
default:printf("请在0-6之间选择\n");
}}
void main()
{
while(k)
menu();
}
//平均数是排序后,输出的,如果你不想直接输入,那就不要对每个学生进行选择排序了
C语言 学生成绩管理系统?
附录* 综合实例——学生成绩查询系统
这是一个用c语言编写的小软件——学生成绩查询系统,同学们可以将其作为一个综合实例,对其进行仔细的阅读和研究,体验编程处理问题的过程,加深对编程语言的理解,提高处理问题的综合能力。
1、程序的功能:
1)可以根据用户输入的输入、输出文件名,读入学生成绩,完成数据的初始化。
2)可以查询指定学生的成绩,可以是指定科目的成绩,也可以是全部科目的成绩。
3)友好退出。
2、使用说明:
1)将输入文件放到指定的目录下(即../student/)
图1
2)启动管理程序student.exe
3)在程序的使用界面,首先输入输入文件名和输出文件名,完成程序的初始化,操作如下图所示
图2
然后,按照按照提示,输入学生姓名和需要程序的成绩(此软件暂时只设置了五成成绩,同学们可以按照需要扩展)科目代码,也可以输入查询所有成绩的代码。程序成绩,如下图所示
图3
4)输入代码“q”退出程序。
3、程序代码
#include
#include
#include
FILE *f1,*f2;
char file1[20],file2[20],name[200][20],name1[15];
int n,m,data[200][10];
void init(){
int i,j;
char ch=' ';
printf("%20c欢迎使用班级成绩管理系统\n\n",ch);
printf("请输入输入和输出文件名(中间用一个空格隔开):\n");
scanf("%s %s",file1,file2);// 1)该条语句的功能是什么?
f1=fopen(file1,"r");
f2=fopen(file2,"w");
fscanf(f1,"%d%d",n,m); // 2)该条语句的功能是什么?
for(i=1;i=n;i++)
{
fscanf(f1,"%s",name[i]); // 3)该条语句的功能是什么?
data[i][0]=0; // 4)该条语句的功能是什么?没有这条语句可不可以?
for(j=1;j=m;j++)
{
fscanf(f1,"%d",data[i][j]);
data[i][0]+=data[i][j]; // 5)该条语句的功能是什么?
}
}
fprintf(f2,"name\tyuwen\tshuxue\tyingyu\twuli\thuaxue\tzongfen\n ");
for(i=1;i=n;i++)
{
fprintf(f2,"%s\t",name[i]);
for(j=1;j=m;j++)
fprintf(f2,"%d\t",data[i][j]);
fprintf(f2,"%d\n",data[i][0]);
}
fclose(f1);// 6)问什么可以在这关闭输入文件?
fclose(f2);
}
void search(char na[],char num){
int i=1,j;
while((i=n)(strcmp(na,name[i])!=0))i++;
if(i=n){
switch(num){
case '1':printf("%s的语文成绩为%d!\n",na,data[i][1]);break;
case '2':printf("%s的数学成绩为%d!\n",na,data[i][2]);break;
case '3':printf("%s的英语成绩为%d!\n",na,data[i][3]);break;
case '4':printf("%s的物理成绩为%d!\n",na,data[i][4]);break;
case '5':printf("%s的化学成绩为%d!\n",na,data[i][5]);break;
case 'a':
printf("%s的各科成绩为:\n",name[i]);
printf("语文\t数学\t英语\t物理\t化学\t总成绩\n");
for(j=1;j=m;j++)
printf("%d\t",data[i][j]);
printf("%d\n",data[i][0]);
break;
default: printf("没有这种查询方式,请确认后再次输入!\n");
}
}
else printf("查无此人,请确认后再次查询!\n");
printf("\n\n");
}
main(){
init();//数据初始化
printf("数据初始化结束!\n\n");
printf("------------------------------------------------\n\n");
char na[20];
char num;
while(1){ // 7)该条语句的功能是什么?
//scanf("%s%c%c",na,num,num); // 8)此处的输入可不可以用这条语句?
printf("请输入学生的姓名和要查询成绩的科目代码(中间用一个空格隔开):\n(1 语文 2 数学 3 英语 4 物理 5 化学 a 所有科目成绩 q 退出)\n");
scanf("%s",na);
if(strcmp(na,"q")==0)break; // 9)问什么要用这条语句strcmp(na,"q")==0?
scanf("%c%c",num,num); // 10)为什么用了两次num?
search(na,num);
printf("------------------------------------------------\n\n");
printf("\n请输入新的查询:\n\n");
}
system("pause");
}
这是我以前的一个程序,你改改吧,应该很好改
c语言成绩管理系统
代码如下:
#include?stdio.h
#include?string.h
#define MAX 100 //?学生最大数量
#define?COURSE_N 3 //?课程数
struct?Student
{
unsigned?int id; //?学号
char name[20]; //?姓名
int scores[COURSE_N]; //?课程分数:语文、数学、英语
int sum; //?总分
float average; //?平均分
};
struct?StudentList?{
struct?Student?students[MAX]; //?学生列表
int?size; //?实际学生人数
};
struct?StudentList?studentList;
void?PrintStudents(struct?StudentList?*pList)
{
int?i;
printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
for?(i?=?0;?i??pList-size;?i++)?{
printf("%d\t%s\t%d\t%d\t%d\t%d\t%.2f\n",
pList-students[i].id,
pList-students[i].name,
pList-students[i].scores[0],
pList-students[i].scores[1],
pList-students[i].scores[2],
pList-students[i].sum,
pList-students[i].average);
}
printf("\n");
}
void?PrintStudent(struct?Student?*pStu)
{
int?i;
printf("学号\t姓名\t语文\t数学\t英语\t总分\t平均分\n");
printf("%d\t%s\t%d\t%d\t%d\t%d\t%.2f\n",
pStu-id,
pStu-name,
pStu-scores[0],
pStu-scores[1],
pStu-scores[2],
pStu-sum,
pStu-average);
printf("\n");
}
//?通过学号查找学生
struct?Student*?FindStudentById(struct?StudentList?*pList,?unsigned?int?id)
{
int?i;
for?(i?=?0;?i??pList-size;?i++)?{
if?(pList-students[i].id?==?id)?{
return?pList-students[i];
}
}
return?NULL;
}
//?通过姓名查找学生
struct?Student*?FindStudentByName(struct?StudentList?*pList,?const?char?*name)
{
int?i;
for?(i?=?0;?i??pList-size;?i++)?{
if?(strcmpi((const?char?*)pList-students[i].name,?name)?==?0)?{
return?pList-students[i];
}
}
return?NULL;
}
//?添加学生
void?AddStudent(struct?StudentList?*pList)
{
int?ok?=?0;
do?{
printf("请输入学号:");
scanf("%d",?pList-students[pList-size].id);
if?(FindStudentById(pList,?pList-students[pList-size].id)?!=?NULL)?{
printf("学号重复!\n");
}
else?{
ok?=?1;
}
}?while?(!ok);
printf("请输入姓名:");
scanf("%s",?pList-students[pList-size].name);
printf("请输入语文分数:");
scanf("%d",?pList-students[pList-size].scores[0]);
printf("请输入数学分数:");
scanf("%d",?pList-students[pList-size].scores[1]);
printf("请输入英语分数:");
scanf("%d",?pList-students[pList-size].scores[2]);
pList-students[pList-size].sum?=?pList-students[pList-size].scores[0];
pList-students[pList-size].sum?+=?pList-students[pList-size].scores[1];
pList-students[pList-size].sum?+=?pList-students[pList-size].scores[2];
pList-students[pList-size].average?=?(float)pList-students[pList-size].sum?/?COURSE_N;
pList-size++;
printf("学生添加成功!\n\n");
}
//?修改学生信息
void?ModifyStudent(struct?StudentList?*pList)
{
int?id;
struct?Student?*p?=?NULL;
printf("请输入学号:");
scanf("%d",?id);
p?=?FindStudentById(pList,?id);
if?(p?!=?NULL)?{
printf("请输入姓名:");
scanf("%s",?p-name);
printf("请输入语文分数:");
scanf("%d",?p-scores[0]);
printf("请输入数学分数:");
scanf("%d",?p-scores[1]);
printf("请输入英语分数:");
scanf("%d",?p-scores[2]);
p-sum?=?p-scores[0];
p-sum?+=?p-scores[1];
p-sum?+=?p-scores[2];
p-average?=?(float)p-sum?/?COURSE_N;
printf("修改学生信息成功。\n\n");
}
else?{
printf("没有找到学号为[%u]的学生。\n\n",?id);
}
}
void?DeleteStudent(struct?StudentList?*pList)
{
int?id,?index?=?-1,?i;
printf("请输入学号:");
scanf("%d",?id);
for?(i?=?0;?i??pList-size;?i++)?{
if?(pList-students[i].id?==?id)?{
index?=?i;
break;
}
}
if?(index?!=?-1)?{
for?(i?=?index;?i??pList-size?-?1;?i++)?{
memcpy(pList-students[i],?pList-students[i?+?1],?sizeof(struct?Student));
}
pList-size--;
printf("成功删除学号为[%d]的学生。\n\n",?id);
}?
else?{
printf("没有找到学号为[%u]的学生。\n\n",?id);
}
}
void?FindStudent(struct?StudentList?*pList)
{
struct?Student?*p;
char?name[20];
printf("请输入学生姓名:");
scanf("%s",?name);
p?=?FindStudentByName(pList,?name);
if?(p?!=?NULL)?{
PrintStudent(p);
}
else?{
printf("没有找到姓名为[%s]的学生。\n\n",?name);
}
}
//?按平均分排序
void?SortByAverage(struct?StudentList?*pList)
{
int?i,?j;
struct?Student?temp;
for?(i?=?0;?i??pList-size?-?1;?i++)?{
for?(j?=?i?+?1;?j??pList-size;?j++)?{
if?(pList-students[i].average??pList-students[j].average)?{
memcpy(temp,?pList-students[i],?sizeof(struct?Student));
memcpy(pList-students[i],?pList-students[j],?sizeof(struct?Student));
memcpy(pList-students[j],?temp,?sizeof(struct?Student));
}
}
}
}
int?main()
{
int?exit?=?0;
int?choose?=?0;
while?(!exit)?{
printf("------?学生成绩管理系统?------\n");
printf("1.?增加学生记录\n");
printf("2.?修改学生记录\n");
printf("3.?删除学生记录\n");
printf("4.?按姓名查询学生记录\n");
printf("5.?按平均成绩排序\n");
printf("6.?退出\n");
printf("请选择(1?-?6):");
scanf("%d",?choose);
switch?(choose)?{
case?1:
AddStudent(studentList);
break;
case?2:
ModifyStudent(studentList);
break;
case?3:
DeleteStudent(studentList);
break;
case?4:
FindStudent(studentList);
break;
case?5:
SortByAverage(studentList);
PrintStudents(studentList);
break;
case?6:
exit?=?1;
break;
default:
printf("无效的选项。\n");
break;
}
}
printf("已退出系统!\n");
return?0;
}
运行结果: