本人编了一个用结构体录入学生基本信息的学生管理系统,但是不知道哪里有问题?请各位帮忙指出!
#include<stdio.h>#include<string.h>
#include<stdlib.h>
//学生课程的基本信息
typedef struct COURSE
{
char course[20];
char department[20];
char teacher[20];
int mark;
struct COURSE *next;
}COU;
//学生基本信息
typedef struct STUDENT
{
char num[30];
char name[30];
char sex;
COU *link;
float average;
struct STUDENT *next;
}STU;
void display_menu();
int password();
COU *Course();
void CreateCourse(COU **head,COU *q);
float ave(COU *h);
STU *student();
void CreateStudent(STU **head,STU *m);
main()
{
int i=0,n;
int choice;
STU *head=NULL,*ptr;
COU *p,*q;
i=password();
if(i)
{
printf("密码正确\n");
display_menu();
do
{
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入学生的个数\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
CreateStudent(&head,student());
}
for(i=0;i<n;i++)
{
printf("\t学号\t姓名\t性别\t平均分");
printf("\t%s\t%s\t%c\t%f",head->num,head->name,head->sex,head->average);
p=head->link;
while(p!=NULL)
{
printf("\t课程\t分数\t任课老师\t系别\n");
printf("\t%s\t%d\t%s\t%s\n",p->course,p->mark,p->teacher,p->department);
q=p;
p=p->next;
free(q);
}
ptr=head;
head=head->next;
free(ptr);
}
case 6:exit(0);
}
}while(choice>0&&choice<7);
}
else
printf("对不起,您已经输入错误码次数超过三次!谢谢使用!\n");
}
int password()
{
char p;
char *q=&p;
int i=0;
printf("请输入密码,只能输入三次\n");
for(i=0;i<3;i++)
{
scanf("%s",q);
//getchar();
if(strcmp(q,"1234")==0)
{
break;
}
else
{
printf("密码错误\n");
}
}
if(i==3)
return 0;
else
return 1;
}
void display_menu()
{
printf("\t欢迎进入学生管理系统\t\n");
printf("\t1|输入学生信息\t\n");
printf("\t2|输出学生信息\t\n");
printf("\t3|学生成绩排名\t\n");
printf("\t4|查询学生信息\t\n");
printf("\t5|删除某个学生\t\n");
printf("\t6|退出管理系统\t\n");
printf("\t请在1~6之间选择\t\n");
}
//创建课程链表 并且以不在0-100之间的分数为结束标志
COU *Course()
{
COU *p;
p=(COU *)malloc(sizeof(COU));
printf("请输入课程名\n");
scanf("%s",&p->course);
printf("请输入系别\n");
scanf("%s",&p->department);
printf("请输入任课老师\n");
scanf("%s",&p->teacher);
printf("请输入这门课的成绩");
scanf("%d",&p->mark);
if(p->mark<0||p->mark>100)
{
return NULL;
free(p);
}
else
{
return p;
}
}
//将学生的各门课程连接成一个链表
void CreateCourse(COU **head,COU *q)
{
COU *p;
p=*head;
if(*head==NULL)
{
(*head)=q;
q->next=NULL;
}
else
{
while(p!=NULL)
p++;
p=q;
q->next=NULL;
}
}
float ave(COU *h)
{
int sum=0;int n=0;
while(h!=NULL)
{
sum=sum+h->mark;
n++;
h=h->next;
}
if(n)
{
return (float) (sum/n);
}
else
return 0;
}
//记录学生基本信息
STU *student()
{
COU *q;
STU *p;
p=(STU *)malloc(sizeof(STU));
printf("请输入学生的学号\n");
scanf("%s",&p->num);
printf("请输入学生的姓名\n");
scanf("%s",&p->name);
getchar();
printf("请输入性别\n");
scanf("%c",&p->sex);
p->link=NULL;
while((q=Course())!=NULL)
{
CreateCourse(&(p->link),q);
}
p->average=ave(p->link);
return p;
}
//创建学生链表
void CreateStudent(STU **head,STU *m)
{
STU *p,*q;
if(*head==NULL||m->average>=(*head)->average)
{
m->next=(*head);*head=m;
}
else
{
p=*head;q=(*head)->next;
while(q!=NULL&&m->average<p->average)
{
p=q;
q=q->next;
}
m->next=q;
p->next=m;
}
}
这个程序实现了学生成绩的录入和学生的基本信息,但是不知道哪里有问题,登录密码是1234!