主题:[讨论]急切急切、有哪位高手帮忙修改正确这个学生成绩管理系统?/、?
[size=4]#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include<math.h>
typedef struct students /*学生信息数据结构的定义*/
{
int number[100];
char name[20];
char sex[4];
float score1;
float score2;
float score3;
float ave;
float sum;
}T_Student;
typedef struct ListNode /*定义结构体*/
{
T_Student tData;
struct ListNode * ptNext;
}T_ListNode,*T_LinkList;
void InitList(T_LinkList *L) /*初始化链表*/
{
*L=(T_LinkList)malloc(sizeof(T_ListNode));
if(NULL == L)
{
}
(*L)->ptNext =NULL;
}
void input(T_ListNode L) /*输入学生信息*/
{
T_ListNode *p;
printf("---请输入学生信息---\n");
printf("输入学生学号:\n");
scanf("%d",p->tData.number);
printf("输入学生姓名:\n");
gets(p->tData.name);
printf("输入学生性别:\n");
gets(p->tData.sex);
printf("输入学生成绩1:\n");
scanf("%f",p->tData.score1);
printf("输入学生成绩2:\n");
scanf("%f",p->tData.score2);
printf("输入学生成绩3:\n");
scanf("%f",p->tData.score3);
}
void Printlist(T_ListNode head) /*显示学生信息*/
{
T_ListNode *p;
*p=head;
printf("学生信息列表\n");
printf("学号\n姓名\n性别\n成绩1\n成绩2\n成绩3\n");
while(p!=NULL)
{
printf("%d\n%s\n%s\n%.2f\n%.2f\n%.2f\n",p->tData.number,p->tData.name,p->tData.sex,p->tData.score1,p->tData.score2,p->tData.score3");
p=p->ptNext;
}
printf("\n按任意键返回主菜单");
}
void check(T_Student *head) /*查询学生信息*/
{ T_Student *temp = head;
if (NULL==head)
{
printf("没有学生信息,请先输入后再查看学生信息\n\n");
}
else
{
printf("学生的所有信息如下:\n\n");
printf("\n");;
while (temp->ptNext!=NULL)
temp = temp->ptNext;
printf("\n\n");
}
}
/*按学生学号进行查询*/
struct T_Student Numcheck(T_Student *head, char number[])
{
T_Student *temp = head;
while (temp->ptNext != NULL)
{
if (!strcmp(temp->num, number))
{
return temp;
}
temp = temp->ptNext;
}
return NULL;
}
/*按学生姓名进行查询*/
struct T_Student Namecheck( T_Student *head, char name[])
{
T_Student *temp = head;
while (temp->ptNext != NULL)
{
if (!strchr(temp->name, name))
{
return temp;
}
temp = temp->ptNext;
}
return NULL;
}
/*按输入信息进行查询学生信息,若找到,返回指向该信息地址的指针,否则返回NULL*/
struct T_Student check( T_Student *head)
{
char number[12];
char name[15];
int select;
int i = 0; /*记录是否按要求查找到学生信息,找到i=1,否则i=0*/
struct T_Student *temp = head;
if (head == NULL)
{
printf("没有学生信息,不能进行查询\n\n");
return NULL;
}
else
{
/*确保输入的数字是1或2或3*/
while (1)
{
printf("按学号查询请按1\n按姓名查询请按2\n返回上级菜单请按3\n");
scanf("%d", &select);
if(select==1 || select==2|| select==3)
{
break;
}
printf("输入的数字非法,请输入1或2或3\n\n");
} /*end of while */
switch (select)
{
case 1: /*按学号进行查询*/
printf("请输入要查询的学号:");
scanf("%s", number);
temp = Numcheck(head, number);
break;
case 2: /*按学生姓名进行查询*/
printf("请输入要查询的学生名字:");
scanf("%s", stuname);
temp = Namecheck(head, name);
break;
case 3:/*返回上级菜单*/
return;
default;
}
}
void update( T_Student *head) /*更新学生信息*/
{
T_Student *temp = NULL;
int isupdate; /*判断学生的信息受否已经修改*/
printf("请先用学号或姓名进行查询要修改的学生信息,然后进行修改\n");
temp = check(head); /*按学号先对要修改的学生信息进行查找*/
if (temp != NULL)
{
isupdate = InputStuInfo(head, temp);
/*若学生的信息修改成功,显示出*/
if (isupdate)
{
printf("学生信息已修改,修改后的信息为:\n");
PrintTitle();
printf("\n");
PrintStuInfo(temp);
printf("\n\n");
}
}
else
{
printf("所以不能进行修改\n\n");
}
}
T_ListNode Creatlist(T_ListNode head) /*添加学生信息*/
{
int n;
T_ListNode p;
p=(T_ListNode)malloc(sizeof(Stu));
do
{
char ch;
printf("\n\t\t请输入新插入学生信息\n");
printf("\n输入学生学号:");
scanf("%d",&p->no);
getchar();
printf("\n输入学生姓名:");
gets(p->name);
printf("\n输入学生性别:");
gets(p->sex);
printf("\n输入学生成绩1:");
scanf("%f",&p->score1);
printf("\n输入学生成绩2:");
scanf("%f",&p->score2);
printf("\n输入学生成绩3:");
scanf("%f",&p->score3);
p->point=head->point;
head->point=p;
printf("\n\n");
printf("是否继续输入?(Y/N)");
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
}
T_ListNode Delete(T_ListNode head) /*删除学生信息*/
{
T_ListNode Delete(T_ListNode head)
{
int no;
T_ListNode p,q;
q=head;
p=head->point;
printf("请输入你想删除学生的学号:");
scanf("%d",&no);
while(p!=NULL)
{
if(p->no==no)
{
printf("你删除学生的姓名是:%s\n",p->name);
printf("他(她)的成绩是:%f\n",p->score);
q->point=p->point;
free(p);
break;
}
p=p->point;
q=q->point;
}
return head;
}
void count() /*计算学生成绩*/
{
struct T_Student *temp = head;
/*计算总成绩*/
struct T_Student sumcount( T_Student *head, char number[] )
{
T_Student *temp = head;
if (!strcmp(temp->num, number))
{ sum=score1+score2+score3;
}
}
/*计算平均成绩*/
struct T_Student avecount(T_Student *head, char number[])
{
T_Student *temp =head;
if (!strcmp(temp->num, number))
{ave=(score1+score2+score3)/3;
}
}
/*显示总成绩*/
struct T_Student display(T_Student *head, char number[])
{
T_Student *temp =head;
if (!strcmp(temp->num, number))
{printf("总分为:sum);
}
}
/*显示平均成绩*/
struct T_Student show(T_Student *head, char number[])
{
T_Student *temp =head;
if (!strcmp(temp->num, number))
{printf("平均分为:ave");
}
}
/*按输入的信息进行计算学生成绩*/
{
printf("计算总成绩请按1\n计算平均成绩请按2\n显示总成绩请按3\n显示平均成绩请按4\n返回上级
菜单请按5");
scanf("%d",&select);
if(select==1||select==2||select==3||select==4||select==5)
{
break;
}
printf("输入的数字非法,请输入1或2或3或4或5\n\n");
switch(select)
{
case 1: /*计算总成绩*/
printf("请输入要计算总成绩的学号:");
scanf("%s",&number);
temp =sum(head,number);
break;
case 2:/*计算平均成绩*/
printf("请输入要计算平均成绩的学号:");
scanf("%s",&number);
temp =ave(head,number);
break;
case 3:/*显示总成绩*/
printf("请输入要显示总成绩的学号:");
scanf("%s",&number);
temp =display(head,number);
break;
case 4:/*显示平均成绩*/
printf("请输入要显示平均成绩的学号:");
scanf("%s",&number);
temp =show(head,number);
break;
case 5:/*返回上级菜单*/
return;
default;
}
}
void display() /*显示名次*/
{
printf("请输入你所要显示名次的学号");
int sum[100],num[100],i,j,t,t2;
printf("/t num /t sum\n");
for(i=1;i<=100,i++)
scanf("%d%d",&num[i],&sum[i]);
/*输入学号,分数*/
for(i=1;i<=100,i++)
for(j=1;j<=100,j++)
if(sum[i]<sum[j])
{t=sum[i];
sum[i]=sum[j];
sum[j]=t;
t2=num[i];
num[i]=num[j];
num[j]=t2;
}
printf("m num sum\n);
for(i=0;i<=100;i++)
printf("%2d%5d%5d",i,num[i],sum[i];);
}
void Instruction() /*主界面*/
{
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("------------显示学生名次请按9-----------------\n");
printf("------------返回请按0-------------------------\n");
printf("----------------------------------------------\n");
void main()
{
int select; /*根据select的值判断将要进行的操作*/
struct students *head = NULL; /*头指针*/
head = InputMem(head); /*把学生信息读入内存*/
while (1)
{
Instruction();
printf("请输入要实现的操作:");
scanf("%d", &select);
printf("\n");
switch (select)
{
case 1: Initlist(); /*初始化链表*/
break;
case 2: input(); /*输入学生信息*/
break;
case 3: Printlist(); /*显示学生信息*/
break;
case 4: check(); /*查询学生信息*/
break;
case 5: update(); /*更新学生信息*/
break;
case 6: Creatlist(); /*添加学生信息*/
break;
case 7: Delete(); /*删除学生信息*/
break;
case 8: count(); /*计算学生成绩*/
break;
case 9: display(); /*显示学生名次*/
break;
case 0: Instruction(); /*返回主菜单*/
default; /*除了0-9,其他输入不起作用*/
}
}
}[/size]
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include<math.h>
typedef struct students /*学生信息数据结构的定义*/
{
int number[100];
char name[20];
char sex[4];
float score1;
float score2;
float score3;
float ave;
float sum;
}T_Student;
typedef struct ListNode /*定义结构体*/
{
T_Student tData;
struct ListNode * ptNext;
}T_ListNode,*T_LinkList;
void InitList(T_LinkList *L) /*初始化链表*/
{
*L=(T_LinkList)malloc(sizeof(T_ListNode));
if(NULL == L)
{
}
(*L)->ptNext =NULL;
}
void input(T_ListNode L) /*输入学生信息*/
{
T_ListNode *p;
printf("---请输入学生信息---\n");
printf("输入学生学号:\n");
scanf("%d",p->tData.number);
printf("输入学生姓名:\n");
gets(p->tData.name);
printf("输入学生性别:\n");
gets(p->tData.sex);
printf("输入学生成绩1:\n");
scanf("%f",p->tData.score1);
printf("输入学生成绩2:\n");
scanf("%f",p->tData.score2);
printf("输入学生成绩3:\n");
scanf("%f",p->tData.score3);
}
void Printlist(T_ListNode head) /*显示学生信息*/
{
T_ListNode *p;
*p=head;
printf("学生信息列表\n");
printf("学号\n姓名\n性别\n成绩1\n成绩2\n成绩3\n");
while(p!=NULL)
{
printf("%d\n%s\n%s\n%.2f\n%.2f\n%.2f\n",p->tData.number,p->tData.name,p->tData.sex,p->tData.score1,p->tData.score2,p->tData.score3");
p=p->ptNext;
}
printf("\n按任意键返回主菜单");
}
void check(T_Student *head) /*查询学生信息*/
{ T_Student *temp = head;
if (NULL==head)
{
printf("没有学生信息,请先输入后再查看学生信息\n\n");
}
else
{
printf("学生的所有信息如下:\n\n");
printf("\n");;
while (temp->ptNext!=NULL)
temp = temp->ptNext;
printf("\n\n");
}
}
/*按学生学号进行查询*/
struct T_Student Numcheck(T_Student *head, char number[])
{
T_Student *temp = head;
while (temp->ptNext != NULL)
{
if (!strcmp(temp->num, number))
{
return temp;
}
temp = temp->ptNext;
}
return NULL;
}
/*按学生姓名进行查询*/
struct T_Student Namecheck( T_Student *head, char name[])
{
T_Student *temp = head;
while (temp->ptNext != NULL)
{
if (!strchr(temp->name, name))
{
return temp;
}
temp = temp->ptNext;
}
return NULL;
}
/*按输入信息进行查询学生信息,若找到,返回指向该信息地址的指针,否则返回NULL*/
struct T_Student check( T_Student *head)
{
char number[12];
char name[15];
int select;
int i = 0; /*记录是否按要求查找到学生信息,找到i=1,否则i=0*/
struct T_Student *temp = head;
if (head == NULL)
{
printf("没有学生信息,不能进行查询\n\n");
return NULL;
}
else
{
/*确保输入的数字是1或2或3*/
while (1)
{
printf("按学号查询请按1\n按姓名查询请按2\n返回上级菜单请按3\n");
scanf("%d", &select);
if(select==1 || select==2|| select==3)
{
break;
}
printf("输入的数字非法,请输入1或2或3\n\n");
} /*end of while */
switch (select)
{
case 1: /*按学号进行查询*/
printf("请输入要查询的学号:");
scanf("%s", number);
temp = Numcheck(head, number);
break;
case 2: /*按学生姓名进行查询*/
printf("请输入要查询的学生名字:");
scanf("%s", stuname);
temp = Namecheck(head, name);
break;
case 3:/*返回上级菜单*/
return;
default;
}
}
void update( T_Student *head) /*更新学生信息*/
{
T_Student *temp = NULL;
int isupdate; /*判断学生的信息受否已经修改*/
printf("请先用学号或姓名进行查询要修改的学生信息,然后进行修改\n");
temp = check(head); /*按学号先对要修改的学生信息进行查找*/
if (temp != NULL)
{
isupdate = InputStuInfo(head, temp);
/*若学生的信息修改成功,显示出*/
if (isupdate)
{
printf("学生信息已修改,修改后的信息为:\n");
PrintTitle();
printf("\n");
PrintStuInfo(temp);
printf("\n\n");
}
}
else
{
printf("所以不能进行修改\n\n");
}
}
T_ListNode Creatlist(T_ListNode head) /*添加学生信息*/
{
int n;
T_ListNode p;
p=(T_ListNode)malloc(sizeof(Stu));
do
{
char ch;
printf("\n\t\t请输入新插入学生信息\n");
printf("\n输入学生学号:");
scanf("%d",&p->no);
getchar();
printf("\n输入学生姓名:");
gets(p->name);
printf("\n输入学生性别:");
gets(p->sex);
printf("\n输入学生成绩1:");
scanf("%f",&p->score1);
printf("\n输入学生成绩2:");
scanf("%f",&p->score2);
printf("\n输入学生成绩3:");
scanf("%f",&p->score3);
p->point=head->point;
head->point=p;
printf("\n\n");
printf("是否继续输入?(Y/N)");
ch=getch();
system("cls");
}
while(ch!='n'&&ch!='N');
}
T_ListNode Delete(T_ListNode head) /*删除学生信息*/
{
T_ListNode Delete(T_ListNode head)
{
int no;
T_ListNode p,q;
q=head;
p=head->point;
printf("请输入你想删除学生的学号:");
scanf("%d",&no);
while(p!=NULL)
{
if(p->no==no)
{
printf("你删除学生的姓名是:%s\n",p->name);
printf("他(她)的成绩是:%f\n",p->score);
q->point=p->point;
free(p);
break;
}
p=p->point;
q=q->point;
}
return head;
}
void count() /*计算学生成绩*/
{
struct T_Student *temp = head;
/*计算总成绩*/
struct T_Student sumcount( T_Student *head, char number[] )
{
T_Student *temp = head;
if (!strcmp(temp->num, number))
{ sum=score1+score2+score3;
}
}
/*计算平均成绩*/
struct T_Student avecount(T_Student *head, char number[])
{
T_Student *temp =head;
if (!strcmp(temp->num, number))
{ave=(score1+score2+score3)/3;
}
}
/*显示总成绩*/
struct T_Student display(T_Student *head, char number[])
{
T_Student *temp =head;
if (!strcmp(temp->num, number))
{printf("总分为:sum);
}
}
/*显示平均成绩*/
struct T_Student show(T_Student *head, char number[])
{
T_Student *temp =head;
if (!strcmp(temp->num, number))
{printf("平均分为:ave");
}
}
/*按输入的信息进行计算学生成绩*/
{
printf("计算总成绩请按1\n计算平均成绩请按2\n显示总成绩请按3\n显示平均成绩请按4\n返回上级
菜单请按5");
scanf("%d",&select);
if(select==1||select==2||select==3||select==4||select==5)
{
break;
}
printf("输入的数字非法,请输入1或2或3或4或5\n\n");
switch(select)
{
case 1: /*计算总成绩*/
printf("请输入要计算总成绩的学号:");
scanf("%s",&number);
temp =sum(head,number);
break;
case 2:/*计算平均成绩*/
printf("请输入要计算平均成绩的学号:");
scanf("%s",&number);
temp =ave(head,number);
break;
case 3:/*显示总成绩*/
printf("请输入要显示总成绩的学号:");
scanf("%s",&number);
temp =display(head,number);
break;
case 4:/*显示平均成绩*/
printf("请输入要显示平均成绩的学号:");
scanf("%s",&number);
temp =show(head,number);
break;
case 5:/*返回上级菜单*/
return;
default;
}
}
void display() /*显示名次*/
{
printf("请输入你所要显示名次的学号");
int sum[100],num[100],i,j,t,t2;
printf("/t num /t sum\n");
for(i=1;i<=100,i++)
scanf("%d%d",&num[i],&sum[i]);
/*输入学号,分数*/
for(i=1;i<=100,i++)
for(j=1;j<=100,j++)
if(sum[i]<sum[j])
{t=sum[i];
sum[i]=sum[j];
sum[j]=t;
t2=num[i];
num[i]=num[j];
num[j]=t2;
}
printf("m num sum\n);
for(i=0;i<=100;i++)
printf("%2d%5d%5d",i,num[i],sum[i];);
}
void Instruction() /*主界面*/
{
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("------------显示学生名次请按9-----------------\n");
printf("------------返回请按0-------------------------\n");
printf("----------------------------------------------\n");
void main()
{
int select; /*根据select的值判断将要进行的操作*/
struct students *head = NULL; /*头指针*/
head = InputMem(head); /*把学生信息读入内存*/
while (1)
{
Instruction();
printf("请输入要实现的操作:");
scanf("%d", &select);
printf("\n");
switch (select)
{
case 1: Initlist(); /*初始化链表*/
break;
case 2: input(); /*输入学生信息*/
break;
case 3: Printlist(); /*显示学生信息*/
break;
case 4: check(); /*查询学生信息*/
break;
case 5: update(); /*更新学生信息*/
break;
case 6: Creatlist(); /*添加学生信息*/
break;
case 7: Delete(); /*删除学生信息*/
break;
case 8: count(); /*计算学生成绩*/
break;
case 9: display(); /*显示学生名次*/
break;
case 0: Instruction(); /*返回主菜单*/
default; /*除了0-9,其他输入不起作用*/
}
}
}[/size]