要求:1.初次录入学生信息
2. 增加一名学生的信息
3. 学生信息浏览;
4. 信息查询(按学号查)
5. 信息查询(按姓名查)
6. 信息排序(按总分降序)
7. 信息排序(按姓名排序)
8. 信息删除(给定学号,删除该学生信息)
9. 信息修改(给定学号,修改该学生信息)
0. 退出
次要功能
10 自己加一个特色功能
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct st
{
char Name[20];
int Num;
float score[4];
float total;
float aver;
}STU;
int menu(void);
void readscore(struct st STU[],int n);
void readscore1(struct stu[],int n);
void printfscore(struct st STU[],int n);
void searchbynum(struct st STU[],int n);
void searchbyname (struct st STU[],int n);
void sortbyscore(struct st STU[],int n,int(*compare)(float a,float b));
void ascending(float a,float b);
void descending(float a,float b);
void sortbyname(struct st STU[],int n);
void de1(struct st STU[],int n);
void edit(struct st STU[],int n);
void aversumofeverystudent(struct st STU[],int n);
int main(void)
{
char ch;
int n=0;
switch(ch)
{
case 0:
printf("End of program!");
exit(0);
case 1:
readscore(STU,n);
break;
case 2:
n++;
readscore1(STU,n);
break;
case 3:
printscore(STU,n);
break;
case 4:
searchbynum(STU,n);
break;
case 5:
searchbyname(STU,n);
break;
case 6:
sortbyscore(STU,n,descending);
printf("\nsort in desending order by score:\n");
printscore(STU,n);
break;
case 7:
sortbyname(STU,n);
printf("\nsort in dictionary order by name:\n");
break;
case 8:
de1(STU,n);
printscore(STU,n);
break;
case 9:
edit(STU,n);
printscore(STU,n);
break;
case 10:
aversumofeverystudent(STU,n);
break;
default:
printf("input error!\n");
}
return 0;
}
int menu(void)
{
int itemselected;
printf("");
printf("学生成绩系统管理\n");
printf("0.退出\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("*");
printf("Input your choice:");
scanf("%d",&itemselected);
return itemselected;
}
void readscore(struct st STU[],int n)
{
int i;
for(i=0; i<n; i++)
scanf("%d%s%",&STU[i].num,&STU[i].name);
getchar();
system("pause");
}
void readscore1(struct st STU[],int n);
{
int i=n,j,flag,m=0;
printf("请输入待增加的学生人数:\n");
scanf("%d",&m);
if(m>0)
{
do
{
flag=1;
while(flag)
{
flag=0;
printf("请输入第%d位学生的学号:\n",i+1);
scanf("%s",stu[i],stuid);
for(j=0;j<i;j++)
{
if(strcmp(stu[i].stuid,stu[j].stuid)==0)
{
printf("该学号已经存在,请重新输入!\n");
flag=1;
break;
}
}
}
}
}
}
void printfscore(struct st STU[],int n)
{
int i;
for(i=0; i<n; i++)
printf("%d%s\n",STU[i].num,STU[i].name);
system("pause");
}
void searchbynum(struct st STU[],int n);
{
int num,i;
printf("请输入需要查询的学号:");
scanf("%d",&num);
getchar();
for(i=0; i<n; i++)
if(STU[i].num==num)
{
printf("%d%s",STU[i].num,STU[i].name);
break;
}
if(i==n)
printf("not found!\n");
system("pause");
}
void searchbyname(struct st STU[],int n)
{
int num,i;
printf("请输入要查询的姓名:");
scanf("%d",&num);
gether();
for(i=0;i<n;i++)
if(STU[i].Num==num)
{
printf("%d%s",STU[I].num,STU[i].score);
break;
}
if(i==n)
printf("not found!\n");
}
void sortbyscore(struct st STU[],int n)
{
int i,j;
struct st temp;
for(i=0; i<n-1; i++)
{
for(j=0; j<n-1; j++)
{
if(STU[j].scoreChinese+y[j].scoreMath+y[j].scoreEnglish>y[j+1].scoreChinese+y[j+1].scoreMath+y[j+1].scoreEnglish)
{
temp=[j];
STU[j]=STU[j+1];
STU[j+1]=temp;
}
}
}
for(j=0; j<n; j++)
{
STU[j].scoretotal=STU[j].scoreChinese+STU[j].scoreMath+STU[j].scoreEnglish;//计算总分//
printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
printf("----------------------------------------------------------------------------------------\n");
printf("%d \t%s \t%.1f \t%.1f \t%.1f \t%.1f \n",STU[j].num,STU[j].name,STU[j].scoreChinese,STU[j].scoreMath,STU[j].scoreEnglish,STU[j].scoretotal);
}
system("pause");
}
void sortbyname(struct st STU[],int n)
{
int i,j,k,max=0;
for(i=0; i<n; i++)
{
scanf("%d%s",&STU[i].num,&STU[i].name);
}
k=STU[0].name;
for(i=1; i<n; i++)
{
if(strcmp(k,STU[i].name)<'0')
k=STU[i].name;
}
j=k;
printf("%d %s %.1f %.1f %.1f",STU[j].num,STU[j].name);
system("pause");
}
void de1(struct st STU[],int n)
{
int i,j,temp=0;
int c;
printf("请输入需要删除的学生信息的学号:\n");
scanf("%d",&c);
for(i=0; i<=n; i++)
{
if(STU[i].num==c)
{
temp=1;
for(j=i; j<n-1; j++)
{
STU[j]=STU[j+1];
}
}
}
if(temp==0)
printf("该学生不存在\n");
if(temp==1)
{
printf("删除成功\n");
n--;
for(i=0; i<n; i++)
{
printf("%d %s ",STU[j].num,STU[j].name);
}
}
system("pause");
}
void edit(sturct st STU[],int n)
{
int i,c;
printf("请输入你要修改的学生的学号:");
scanf("%d",&c);
for(i=0;i<n;i++)
{
if(c==STU[i].num)
{
printf("请重新录入该学生信息\n");
scanf("%d %s ",&STU[i].num,&STU[i].name);
}
}
}
void aversumofeverystudent(struct st STU[],int n)
{
int i;
printf("total average\n");
for(i=0;i<sumofeverystudent;i++)
{
printf("%s:%5d%.2f\n",stu[i].name,total[i],(double)total[i]/sumofeverystudent);
}
}
给你改好了。功能都一样,有些变量名换了一下。
#include <malloc.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define len sizeof(struct student)
#define N 30
typedef struct student {
char number;
char name[20];
int score[10];
int total;
} student;
void menu();
void add(student stu[], int i, int m); //添加
void output(student stu[], int i, int m); //浏览
void search_by_number(student stu[], int i, int m); //按学号查询信息
void search_by_name(student stu[], int i, int m); //按姓名查询信息
void sortjiang_by_total(student stu[], int i, int m); //按总分降序
void sort_by_name(student stu[], int i, int m); //按姓名排序
void deleted_by_number(student stu[], int i, int m); //给定学号,删除该学生信息
void change_by_number(student stu[], int i, int m); //给定学号,修改该学生信息
void sortsheng_by_total(student stu[], int i, int m); //按总分升序
//主函数
int main() {
int q, w, m; //记录用户输入的功能选项,人数,科目数量
student stu[w];
int i, j, s; ////i、j作为学生人数和科目门数的循环变量,s为标记变量
int first=0;
P:
menu();
if(first==0){
q=1;
first=1;
}else{
printf("请选择您所需要的功能:");
scanf("%d", &q);
}
//查错
if (q < 0 || q > 10) {
do {
printf("请输入正确的功能序号:");
scanf("%d", &q);
} while (q < 0 || q > 10);
}
if (q == 0) {
printf("感谢您使用本系统!再见!");
exit(0);
}
switch (q) {
case 0:
break;
case 1:
if (q == 1) //首次录入信息
printf("请输入学生人数:");
scanf("%d", &w);
printf("请输入科目门数:");
scanf("%d", &m);
for (i = 0; i < w; i++) { //循环录入学号和姓名
printf("请请输入学号,姓名,各科成绩:\n");
scanf("%d", &stu[i].number);
scanf("%s", stu[i].name);
for (j = 0; j < m; j++) { //循环录入各科成绩
scanf("%d", &stu[i].score[j]);
}
}
printf("\n \n");
s = 0; //记录首次录入信息完毕
goto P; //回到功能菜单
if (s == 0) { //防止用户重复录入
do {
printf("您已经录入过学生信息啦!\n");
printf("如想增加学生信息,请选择功能2!");
printf("\n \n");
} while (s != 1);
goto P;
}
case 2:
add(stu, i, m); //添加
i++;
printf("\n \n");
goto P;
case 3:
output(stu, i, m); //浏览
printf("\n \n");
goto P;
case 4:
search_by_number(stu, i, m); //按学号查询
printf("\n \n");
goto P;
case 5:
search_by_name(stu, i, m); //按姓名查询
printf("\n \n");
goto P;
case 6:
sortjiang_by_total(stu, i, m); //按总分降序
printf("\n \n");
goto P;
case 7:
sort_by_name(stu, i, m); //按姓名排序
printf("\n \n");
goto P;
case 8:
deleted_by_number(stu, i, m); //给定学号,删除该学生信息
printf("\n \n");
goto P;
case 9:
change_by_number(stu, i, m); //给定学号,修改该学生信息
printf("\n \n");
goto P;
case 10:
sortsheng_by_total(stu, i, m); //按总分升序
printf("\n \n");
goto P;
}
return 0;
}
void menu() {
printf("1.初次录入学生信息2. 增加一名学生的信息3. 学生信息浏览;4. 信息查询(按学号查)5. 信息查询(按姓名查)6. 信息排序(按总分降序)7. 信息排序(按姓名排序)8. 信息删除(给定学号,删除该学生信息)9. 信息修改(给定学号,修改该学生信息)0. 退出\n");
}
void add(student stu[], int i, int m) //添加
{
int j;
printf("请输入所添加学生的学号,姓名,各科成绩:\n");
scanf("%d", &stu[i].number);
scanf("%s", &stu[i].name);
for (j = 0; j < m; j++) {
scanf("%f", &stu[i].score[j]);
}
}
void output(student stu[], int i, int m) //浏览
{
int j, r;
for (j = 0; j < i; j++) {
printf("%d %s", stu[j].number, stu[j].name);
for (r = 0; r < m; r++) {
printf(" %d", stu[j].score[r]);
}
printf("\n");
}
}
void search_by_number(student stu[], int i, int m) //按学号查询信息
{
int t, j, y = 1;
int number;
printf("请输入您所要查询的学号:");
scanf("%d", &number);
for (t = 0; t < i; t++) {
if (number == stu[t].number) {
y = 0;
printf("%d %s", &stu[t].number, &stu[t].name);
for (j = 0; j < m; j++) {
printf("%d", &stu[t].score[j]);
}
printf("\n");
}
}
if (y == 1) {
printf("查无信息!");
}
}
void search_by_name(student stu[], int i, int m) //按姓名查询信息
{
int t, j, y = 1;
char name;
printf("请输入您所要查询的姓名:");
scanf("%d", &name);
for (t = 0; t < i; t++) {
if (name == stu[t].name[i]) {
y = 0;
printf("%d %s", &stu[t].number, &stu[t].name);
for (j = 0; j < m; j++) {
printf("%d", &stu[t].score[j]);
}
printf("\n");
}
}
if (y == 1) {
printf("查无此人!");
}
}
void sortjiang_by_total(student stu[], int i, int m) //按总分降序
{
student temp;
int o, k;
if (m == -1) {
for (o = 0; o < i; o++) {
for (k = o + 1; k < i; k++) {
if (stu[k].total > stu[o].total) {
temp = stu[k];
stu[k] = stu[o];
stu[o] = temp;
}
}
}
for (o = 0; o < i; o++) {
printf("%s ", stu[o].name);
printf("%d\n", stu[o].total);
}
} else {
for (o = 0; o < i; o++) {
for (k = o + 1; k < i; k++) {
if (stu[k].number > stu[o].number) {
temp = stu[k];
stu[k] = stu[o];
stu[o] = temp;
}
}
}
for (o = 0; o < i; o++) {
printf("%s ", stu[o].name);
printf("%d\n", stu[o].number);
}
}
}
void sort_by_name(student stu[], int i, int m) //按姓名排序
{
int j, h, w;
char k[20];
for (i = 0; i < w; i++) {
scanf("%d\t\t%s\t\t", &stu[i].number, &stu[i].name);
for (h = 0; h < m; h++) {
scanf("%d", &stu[i].score[j]);
}
}
strcpy(k, stu[0].name);
for (i = 1; i < w; i++) {
if (strcmp(k, stu[i].name) < 0)
strcpy(k, stu[i].name);
}
j = k[i];
printf("%d\t\t%s\t\t", stu[j].number, stu[j].name);
for (h = 0; h < m; h++) {
scanf("%d", &stu[j].score[h]);
}
}
void deleted_by_number(student stu[], int i, int m) //给定学号,删除该学生信息
{
int j, h, w, temp = 0;
int c;
printf("请输入需要删除的学生信息的学号:\n");
scanf("%d", &c);
for (i = 0; i <= w; i++) {
if (stu[i].number == c) {
temp = 1;
for (j = i; j < w - 1; j++) {
stu[j] = stu[j + 1];
}
}
}
if (temp == 0)
printf("该学生不存在\n");
if (temp == 1) {
printf("删除成功\n");
w--;
for (i = 0; i < w; i++) {
printf("%d\t\t%s\t\t", stu[j].number, stu[j].name);
for (h = 0; h < m; h++) {
scanf("%d", &stu[j].score[h]);
}
}
}
}
void change_by_number(student stu[], int i, int m) //给定学号,修改该学生信息
{
int c, h, w;
printf("请输入你要修改的学生的学号:");
scanf("%d", &c);
for (i = 0; i < w; i++) {
if (c == stu[i].number) {
printf("请重新录入该学生信息\n");
scanf("%d\t\t%s\t\t", &stu[i].number, &stu[i].name);
for (h = 0; h < m; h++) {
scanf("%d", &stu[i].score[h]);
}
}
}
}
void sortsheng_by_total(student stu[], int i, int m) {
int a, c, j, n, z, k, S;
int sum[S];
int v;
student temp;
for (j = 0; j < i; j++) {
for (c = 0; c < m; c++) {
sum[j] += stu[j].score[c];
}
}
for (n = 0; n < i - 1; n++) {
for (k = n + 1; k < i; k++) {
if (sum[k] < sum[n]) {
temp = stu[k];
stu[k] = stu[n];
stu[n] = temp;
v = sum[k];
sum[k] = sum[n];
sum[n] = v;
}
}
}
for (a = 0; a < i; a++) {
printf("%d\t\t%s\t\t", stu[a].number, stu[a].name);
for (z = 0; z < m; z++) {
printf("%d\t", stu[a].score[z]);
}
printf("总分%d\t\t", sum[a]);
printf("\n");
}
}
报错的地方帮你改正了,但我觉得你还需要再认真改一下代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct st
{
char name[20]; //name改为小写
int num; //num改为小写
float score[4];
float total;
float aver;
}STU;
int menu(void);
void readscore(struct st STU[], int n);
void readscore1(struct stu[], int n);
void printfscore(struct st STU[], int n);
void searchbynum(struct st STU[], int n);
void searchbyname(struct st STU[], int n);
void sortbyscore(struct st STU[], int n, int(*compare)(float a, float b));
void ascending(float a, float b);
void descending(float a, float b);
void sortbyname(struct st STU[], int n);
void de1(struct st STU[], int n);
void edit(struct st STU[], int n);
void aversumofeverystudent(struct st STU[], int n);
int main(void)
{
char ch;
struct st STU[50]; //定义一个STU数组
int n = 0;
scanf_s("%d", &n);
scanf_s("%c", &ch);
switch (ch)
{
case 0:
printf("End of program!");
exit(0);
case 1:
readscore(STU, n);
break;
case 2:
n++;
readscore1(STU, n);
break;
case 3:
printscore(STU, n);
break;
case 4:
searchbynum(STU, n);
break;
case 5:
searchbyname(STU, n);
break;
case 6:
sortbyscore(STU, n, descending);
printf("\nsort in desending order by score:\n");
printscore(STU, n);
break;
case 7:
sortbyname(STU, n);
printf("\nsort in dictionary order by name:\n");
break;
case 8:
de1(STU, n);
printscore(STU, n);
break;
case 9:
edit(STU, n);
printscore(STU, n);
break;
case 10:
aversumofeverystudent(STU, n);
break;
default:
printf("input error!\n");
}
return 0;
}
int menu(void)
{
int itemselected;
printf("");
printf("学生成绩系统管理\n");
printf("0.退出\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("*");
printf("Input your choice:");
scanf("%d", &itemselected);
return itemselected;
}
void readscore(struct st STU[], int n)
{
int i;
for (i = 0; i < n; i++)
scanf("%d%s%", &STU[i].num, &STU[i].name);
getchar();
system("pause");
}
void readscore1(struct st STU[], int n) //去掉分号
{
int i = n, j, flag, m = 0;
printf("请输入待增加的学生人数:\n");
scanf("%d", &m);
if (m > 0)
{
flag = 1;
while (flag)
{
flag = 0;
printf("请输入第%d位学生的学号:\n", i + 1);
scanf("%s", STU[i].num); //输入num字段
for (j = 0; j < i; j++)
{
if (strcmp(STU[i].num, STU[j].num) == 0) //stu改为STU字段
{
printf("该学号已经存在,请重新输入!\n");
flag = 1;
break;
}
}
}
}
}
void printfscore(struct st STU[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d%s\n", STU[i].num, STU[i].name);
system("pause");
}
void searchbynum(struct st STU[], int n) //去掉分号
{
int num, i;
printf("请输入需要查询的学号:");
scanf("%d", &num);
getchar();
for (i = 0; i < n; i++)
if (STU[i].num == num)
{
printf("%d%s", STU[i].num, STU[i].name);
break;
}
if (i == n)
printf("not found!\n");
system("pause");
}
void searchbyname(struct st STU[], int n)
{
int num, i;
printf("请输入要查询的姓名:");
scanf("%d", &num);
gether();
for (i = 0; i < n; i++)
if (STU[i].num == num) //num改为小写
{
printf("%d%s", STU[i].num, STU[i].score); //i改为小写
break;
}
if (i == n)
printf("not found!\n");
}
void sortbyscore(struct st STU[], int n)
{
int i, j;
struct st temp;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1; j++)
{
if (STU[j].score[0] + STU[j].score[1] + STU[j].score[2] > STU[j + 1].score[0] + STU[j + 1].score[1] + STU[j + 1].score[2])
{
temp = STU[j];
STU[j] = STU[j + 1];
STU[j + 1] = temp;
}
}
}
for (j = 0; j < n; j++)
{
STU[j].total = STU[j].score[0] + STU[j].score[1] + STU[j].score[2];//计算总分//
printf("学号\t姓名\t语文\t数学\t英语\t总分\n");
printf("----------------------------------------------------------------------------------------\n");
printf("%d \t%s \t%.1f \t%.1f \t%.1f \t%.1f \n", STU[j].num, STU[j].name, STU[j].score[0], STU[j].score[1], STU[j].score[2], STU[j].total);
}
system("pause");
}
void sortbyname(struct st STU[], int n)
{
int i, j, k, max = 0;
for (i = 0; i < n; i++)
{
scanf("%d%s", &STU[i].num, &STU[i].name);
}
k = STU[0].name;
for (i = 1; i < n; i++)
{
if (strcmp(k, STU[i].name) < '0')
k = STU[i].name;
}
j = k;
printf("%d %s %.1f %.1f %.1f", STU[j].num, STU[j].name);
system("pause");
}
void de1(struct st STU[], int n)
{
int i, j, temp = 0;
int c;
printf("请输入需要删除的学生信息的学号:\n");
scanf("%d", &c);
for (i = 0; i <= n; i++)
{
if (STU[i].num == c)
{
temp = 1;
for (j = i; j < n - 1; j++)
{
STU[j] = STU[j + 1];
}
}
}
if (temp == 0)
printf("该学生不存在\n");
if (temp == 1)
{
printf("删除成功\n");
n--;
for (i = 0; i < n; i++)
{
printf("%d %s ", STU[j].num, STU[j].name);
}
}
system("pause");
}
void edit(struct st STU[], int n)
{
int i, c;
printf("请输入你要修改的学生的学号:");
scanf("%d", &c);
for (i = 0; i < n; i++)
{
if (c == STU[i].num)
{
printf("请重新录入该学生信息\n");
scanf("%d %s ", &STU[i].num, &STU[i].name);
}
}
}
void aversumofeverystudent(struct st STU[], int n)
{
int i;
printf("total average\n");
for (i = 0; i < n; i++)
{
printf("%s:%5d%.2f\n", STU[i].name, STU[i].total, (double)STU[i].total / n);
}
}