发布网友 发布时间:2022-04-22 17:18
共5个回答
热心网友 时间:2022-07-14 04:30
单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生信息进行排序,借助了临时数组来标记排好序的下标。
运行结果如下:
输入数据:
根据总成绩排序:
根据学号删除学生信息:
贴上代码(有点多)
#include <stdio.h>
#include <stdlib.h> //exit函数头文件
#include <string.h> //字符串相关操作头文件
#define MAX_STUDENT 30 //最大学生数
//函数声明,本程序共10个子函数,每个函数对应一个操作
void student_scanf(int n);
void student_printf(int n);
int student_find_name(int n);
int student_find_num(int n);
void student_sort_num(int n);
void student_sort_sum(int n);
int student_alter_num(int n);
int student_alter_name(int n);
int student_delete_num(int n);
int student_delete_name(int n);
//全局数组变量,用于存储学生信息
char names[MAX_STUDENT][50];
int math[MAX_STUDENT];
int english[MAX_STUDENT];
int computer[MAX_STUDENT];
int sum[MAX_STUDENT];
int num[MAX_STUDENT];
//以下变量用于学生信息数组排序,作为临时数组
int temp_num[MAX_STUDENT];
char temp_names[MAX_STUDENT][50];
int temp_math[MAX_STUDENT];
int temp_english[MAX_STUDENT];
int temp_computer[MAX_STUDENT];
int temp_sum[MAX_STUDENT];
//sort数组存储排好序的学号或姓名下标
int sort[MAX_STUDENT];
//循环全局变量
int i, j;
//main主函数
int main(void)
{
int choice,n;
while (1)
{
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("[9] 按学号删除某个学生信息\n");
printf("[10] 按姓名删除某个学生信息\n");
printf("[0] 退出程序\n");
printf("请输入您的选择(0 - 9):");
scanf("%d",&choice);
printf("**************************************)\n");
switch (choice)
{
case 1://录入;
printf("请输入录入的学生信息数: ");
scanf("%d",&n);
student_scanf(n);
break;
case 2://输出;
student_printf(n);
break;
case 3://根据学号查找
student_find_num(n);
break;
case 4://根据姓名查找
student_find_name(n);
break;
case 5://按学号排序
student_sort_num(n);
break;
case 6://按姓名排序
student_sort_sum(n);
break;
case 7://按学号修改
student_alter_num(n);
break;
case 8://按姓名修改
student_alter_name(n);
break;
case 9://按学号删除
student_delete_num(n);
n--;
break;
case 10://按姓名删除
student_delete_name(n);
n--;
break;
case 0://退出程序
printf("退出程序\n");
printf("程序结束,谢谢使用!\n");
exit(0);
default:
printf("您输入的菜单有误。请重新输入!\n");
}
}
return 0;
}
//1.输入信息
void student_scanf(int n)
{
for (i = 0; i<n; ++i)
{
printf("\n请输入第%d个学生的信息:\n", i + 1);
printf("\n学号:");
scanf("%d", &num[i]);
printf("\n姓名:");
scanf("%s", names[i]);
printf("\n数学成绩:");
scanf("%d", &math[i]);
printf("\n英语成绩:");
scanf("%d", &english[i]);
printf("\n计算机成绩:");
scanf("%d", &computer[i]);
//计算总成绩
sum[i] = math[i] + english[i] + computer[i];
}
}
//2.打印信息
void student_printf(int n)
{
printf("\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");
printf("----------------------------------------------------------\n");
for (i = 0; i<n; ++i)
{
printf("%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n", num[i], names[i], math[i], english[i], computer[i], sum[i]);
}
printf("-------------------------------------------------------\n");
}
//3.按学号查找
int student_find_num(int n)
{
int nums;
int result;
printf("请输入待查找的学生学号:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最后判断q值
if (result == -1)
{
printf("没有该学生信息!\n");
return 0;
}
else
{
//先打印表头
printf("\n学号\t\t姓名\t\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");
//再打印数据
printf("%d\t\t%s\t\t%d\t\t%d\t\t%d\t%d\n", num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf("打印出查找结果!\n");
}
return 1;
}
//4.用姓名查找成绩
int student_find_name(int n)
{
char name[200];
int result;
printf("请输入待查找的学生姓名:");
scanf("%s", name);
result = -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name, names[i]) == 0)
{
result = i;
break;
}
}
if (result == -1)
{//未找到结果
printf("没有该学生信息!\n");
return 0;
}
else//找到结果
{
printf("\n学号\t姓名\t数学成绩\t英语成绩\t计算机成绩\t总成绩\n");
printf("%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n", num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf("已完成查找!\n");
}
return 1;
}
//5.按学号排序
void student_sort_num(int n)
{
int min,max;
for(i=0; i<n; ++i) //复制临时数组
{
temp_num[i] = num[i];
}
max = 0; //查找学号最大值,将其下标存至sort数组的最后一个值中
for(j=1; j<n; j++)
{
if(temp_num[max]<temp_num[j])
max = j;
}
sort[n-1] = max; //sort数组的最后一个数
for(i=0; i<n-1; ++i)
{
min = i; //查找学号最小值
for(j=0; j<n; ++j)
{
if(temp_num[min]>temp_num[j])
min = j;
}
//sort数组记录排序的学生信息的下标
sort[i] = min;
temp_num[min] = temp_num[max]; //利用临时数组将查找过的学生信息的学号设为最大值,排除查找干扰
}
for(i=0; i<n; ++i) //再复制一次临时数组
{
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_math[i] = math[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
}
for(i=0; i<n; i++) //按照下标对原数组进行修改
{
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
math[i] = temp_math[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
}
printf("排序完毕,请按菜单键2查看排序结果!\n");
return ;
}
//6.按总成绩排序
void student_sort_sum(int n)
{
int min,max;
for(i=0; i<n; ++i) //复制临时数组
{
temp_sum[i] = sum[i];
}
max = 0; //查找总成绩最大值,将其下标存至sort数组的最后一个值中
for(j=1; j<n; j++)
{
if(temp_sum[max]<temp_sum[j])
max = j;
}
sort[n-1] = max; //sort数组的最后一个数
for(i=0; i<n-1; ++i)
{
min = i; //查找总成绩最小值
for(j=0; j<n; ++j)
{
if(temp_sum[min]>temp_sum[j])
min = j;
}
//sort数组记录排序的学生信息的下标
sort[i] = min;
temp_sum[min] = temp_sum[max]; //利用临时数组将查找过的学生信息的总成绩设为最大值,排除查找干扰
}
for(i=0; i<n; ++i) //再复制一次临时数组
{
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_math[i] = math[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
}
for(i=0; i<n; i++) //按照下标对原数组进行修改
{
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
math[i] = temp_math[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
}
printf("排序完毕,请按菜单键2查看排序结果!\n");
return ;
}
//7.按学号修改学生信息
int student_alter_num(int n)
{
int nums;
int result;
printf("请输入待修改的学生学号:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最后判断q值
if (result == -1)
{
printf("没有该学生信息!\n");
return 0;
}
else //修改信息值
{
printf("请重新输入该学生信息:\n");
printf("学号:\n");
scanf("%d",&num[result]);
printf("姓名:\n");
scanf("%s",names[result]);
printf("数学成绩:\n");
scanf("%d",&math[result]);
printf("英语成绩:\n");
scanf("%d",&english[result]);
printf("计算机成绩:\n");
scanf("%d",&computer[result]);
sum[result] = math[result] + english[result] + computer[result];
}
return 1;
}
//8.按姓名修改学生信息
int student_alter_name(int n)
{
char name[50];
int result;
printf("请输入待修改的学生姓名:");
scanf("%s",name);
result= -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name,names[i])==0)
{
result = i;
break;
}
}
//最后判断q值
if (result == -1)
{
printf("没有该学生信息!\n");
return 0;
}
else //修改信息值
{
printf("请重新输入该学生信息:\n");
printf("学号:\n");
scanf("%d",&num[result]);
printf("姓名:\n");
scanf("%s",names[result]);
printf("数学成绩:\n");
scanf("%d",&math[result]);
printf("英语成绩:\n");
scanf("%d",&english[result]);
printf("计算机成绩:\n");
scanf("%d",&computer[result]);
sum[result] = math[result] + english[result] + computer[result];
}
return 1;
}
//9.按学号删除学生信息
int student_delete_num(int n)
{
int nums;
int result;
printf("请输入待删除的学生学号:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最后判断q值
if (result == -1)
{
printf("没有该学生信息!\n");
return 0;
}
else //删除当前学生信息即为将数组从result的位置依次前挪一个位置
{
for(i=result; i<n-1; ++i) //最后在main函数中,要将n的值减1
{
num[i] = num[i+1];
strcpy(names[i],names[i+1]);
math[i] = math[i+1];
english[i] = english[i+1];
computer[i] = computer[i+1];
sum[i] = sum[i+1];
}
}
return 1;
}
//10.按姓名删除学生信息
int student_delete_name(int n)
{
char name[50];
int result;
printf("请输入待删除的学生姓名:");
scanf("%s",name);
result= -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name,names[i])==0)
{
result = i;
break;
}
}
//最后判断q值
if (result == -1)
{
printf("没有该学生信息!\n");
return 0;
}
else //删除当前学生信息即为将数组从result的位置依次前挪一个位置
{
for(i=result; i<n-1; ++i) //最后在main函数中,要将n的值减1
{
num[i] = num[i+1];
strcpy(names[i],names[i+1]);
math[i] = math[i+1];
english[i] = english[i+1];
computer[i] = computer[i+1];
sum[i] = sum[i+1];
}
}
return 1;
}
热心网友 时间:2022-07-14 04:30
我有一个功能基本上和这差不多。我贴给你吧。热心网友 时间:2022-07-14 04:31
学生信息管理系统
#include<stdio.h>
#inelude<stdlib.h>
#include<stnng.h
#define BUFLEN 100
#define LEN 15
#define N 100
#strucet record
char codc[LEN+I J;
char name[LEN-1];
int age:
char sex 13l:
char timc[1.KN-I J;
char add[301;
char tcl [l.EN+1 J:
char mail[30]:
}stu[N]:
int k=1.n,m.
void readfilcO;
void seekO;
void modify(;
void insert();
void del();
void display(;
void save();
void menu(;
int main(
{
While(k)
menu();
system("pause");
一℃himl 0:
}
void help()
{
printf("\ nO.欢迎使用系统帮助,\ n);
printf("\ n1.进入系统后,先制新学生信息,再查询:\n’);
printf(" \n2.按照菜单提示键入数字代号\ n
printf("\ n3. 增加学生信息后,切记保存按;\.n”
printf("\n4. 谢谢您的仗用!\ n");
}
void n:adlilcO
r
r
char *p-"studcnt.txt'
FILE *fp,
hit i-0;
if ((fp=fopen("studcnt.txt","r" ))`=NULL)
{
printf("Open file %s error' Strike any key to exit! P);
system("pause");
exit(0);
}
while(fscanf(fp,"%s 0os0od0,os 0os %s %s 0os",stu[i].code,stu[i1.name,&stu(i1.age,
stu[i].sex,stuLiJ.time,stuLiJ.add,stu[iJ.tel.stu [iJ.mail)"==8)
{
i++;
i-i;
}
char codc[LEN+1 J;
char name[LEN-1 ];
nit age;
char sex [3I;
char timc[LEN-I J;
char add[30];
char tcl[LEN+I I;
char mail[30J;
)stu[N];
int k=1.n,m;
void readfilcO;
void seek();
void modify();
void insert();
void delO;
void display();
void save();
void menu();
int main()
{
while(k)
menu();
systcm("pause");
return 0:
}
void help()
{
printf(" \ nO.欢迎仗用系统帮助,\ n");
printf(" }n1.进入系统后,先刷新学生信息,再查询:\ n);
printf("in2.按照菜单提示键入数字代号加\ n);
printf("1n,. t}加学生信息后,切记保存按钮\ n”
printf("'nd. i$:41您的使用\ n);
}
void readfile()
{
char *p-"studcnLtxt";
FILE*fp
int i=0;
if ((fp=fopcn("student. tx t","r'' )卜=NULL)
{
printf("Open file %s error' Strike any key to exit!".p);
systcm("pause");
exit(0);
}
i++;
i=i;
}
printf("请选择菜单编号:’’);
scanf("%d",&num);
switch(num)
{
case 0:help();break;
cast 1:readflic();break;
case 2:seek();break;
case 3:modify();break;
case 4:insert();break;
case 5:del();break:
case 6:display();break;
case 7:savc();break;
case 8:k=0,break:
defaalt:prinf(”请在一8之间选择\n"):
}
}
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
热心网友 时间:2022-07-14 04:31
以前做的,应该可以运行#include<stdio.h> #include<string.h> struct S { char name[20]; /*姓名*/ int number; /*学号*/ float score_yuwen; /*语文成绩*/ float score_shuxue; /*数学成绩*/ float score_yingyu; /*英语成绩*/ }T; /*建立学生成绩信息的结构体*//*信息维护========将学生信息数据以文件的形式保存*/ void writefile(T *student,int n) { FILE *fp; int i,j; if((fp=fopen("d:\\kanwei.txt","w+"))==NULL) { printf("can't open file"); exit(0); } for(i=0;i<=n;i++) fprintf(fp,"%s %d %f %f %f\n",student[i].name,student[i].number,student[i].score_yuwen,student[i].score_shuxue,student[i].score_yingyu); fclose(fp); } /* 信息维护========增加学生信息 */ void add(T*student,int n) { int I; printf("输入要增加的学生的姓名、学号、语文成绩、数学成绩、英语成绩:"); scanf("%s %d %f %f %f\n",student[n+1].name,&student[n+1].number,&student[n+1].score_yuwen,&student[n+1].score_shuxue,&student[n+1].scor_yingyu); getchar(); while(student[n+1].number!=0) /*输入学号为0时退出*/ { if(student.number==NULL) { printf("\n没有任何学生资料!\n"); return(sutdent); } endif for(i=0;i<=n;i++) { if(student[n+1].number==student[i].number) printf(“此学生已存在!\n”); else if(student[n+1].number<student[i].number) { student=student[i]; student[i]=student[n+1]; student[n+1]=student; break; } } for(;i<=n;i++) { Student=student[i+1]; student[i+1]=student[n+1]; student[n+1]=student; } n=n+1; } printf("已经增加了!\n") printf("现在的学生数为:%d个!\n",n); return(student); } /* 信息维护========删除学生信息 */ delete(T *head) { score *p1,*p2; int number; printf("输入要删除的学生的学号:"); scanf("%d",&number); getchar(); while(number!=0) /*输入学号为0时退出*/ { if(head==NULL) { printf("\n没有任何学生资料!\n"); return(head); } p1=head.number; while(number!=p1->number&&p1->next!=NULL) /*p1指向的不是所要找的首结点,并且后面还有结点*/ { p2=p1;p1=p1->next; /*p1后移一个结点*/ } if(number==p1->number) { if(p1==head) head=p1->next; /*若p1指向的是首结点,把后一个结点地址赋予head*/ else p2->next=p1->next; /*否则将下一个结点地址赋给前一结点地址*/ printf("删除:%d\n",number);n=n-1; } else printf("%d不存在此学生!\n",number); /*找不到该结点*/ endif } printf("已经删除了!\n") printf("现在的学生数为:%d个!\n",n); return(head); } /*信息维护========修改学生信息*/ void modify(T *student,int n,) { delet(student,n,); addfile(student,n); } /*信息查询========按学生姓名查询*/ int find1(T *student,int n,int *tp) { char name[20]; int i; printf(“输入要查询的学生的名字:”); scanf(“%s,name\n”); for(i=0;i<=20;i++) { if(name==student[i].name) printf(“此学生的信息:%s %d %f %f %f\n”,student[i].name,student[i].number,student[i].score_yuwen,student[i].score_shuxue,student[i].score_yingyu); else { printf(“无此学生信息!请重新输入:\n”); find1(T*student,int n,int *tp); } return() }/*信息查询========按学生学号查询*/ int find2(T *student,int n,int *tp) { int number; int i; printf(“输入要查询的学生的学号:”); scanf(“%d”,number); for(i=0;i<=20;i++) { if(number==student[i].number) printf(“此学生的信息:%s %d %f %f %f\n”,student[i].name,student[i].number,student[i].score_yuwen,student[i].score_shuxue,student[i].score_yingyu); else { printf(“无此学生信息!请重新输入:\n”); find2(T*student,int n,int *tp); } return() }/*=========成绩统计========*/ void count(T*student,int n+1) { int i,score1,score2; char class; printf(“输入课程名和分数段:”); scanf(“%s %d %d”,class,score1,score2); if(score1>score2) { i=score1; score1=score2; score2=i; } if(class==yuwen) yuwen(T*student,n+1,score1,score2); if(class==shuxue) shuxue(T*student,n+1,score1,score2); if(class==yingyu) yingyu(T*student,n+1,score1,score2); }/*========按语文成绩统计========*/ void yuwen(T*student,int n+1,int score1,int score2) { int i,j,a,b; for(i=0;i<=n;i++) for(j=0;j<=n;j++) if(student[i].score_yuwen>student[j].score_yuwen) { student[n+1]=student[i]; student[i]=student[j]; student[j]=student[n+1]; } for(i=0;i<=n;i++) { if(student[i].score_yuwen<=score1) a=i; if(student[i].score_yuwen<=score2) b=i; } for(i=a;i<=b;i++) printf(“%s %d %f %f %f\n”,student[i].name,student[i].number,student[i].score_yuwen,student[i].score_shuxue,student[i].score_yingyu); return() }/*========按数学成绩统计========*/ void shuxue(T*student,int n+1,int score1,int score2) { int i,j,a,b; for(i=0;i<=n;i++) for(j=0;j<=n;j++) if(student[i].score_shuxue>student[j].score_shuxue) { student[n+1]=student[i]; student[i]=student[j]; student[j]=student[n+1]; } for(i=0;i<=n;i++) { if(student[i].score_shuxue<=score1) a=i; if(student[i].score_shuxue<=score2) b=i; } for(i=a;i<=b;...热心网友 时间:2022-07-14 04:32
高二的时候,我自己写过。现在在学其它的语言,就不献丑了,在网上给你找到了,是百度文库里面的,直接复制过来的话,排版不对,你自己去看一下吧,完整的代码。