#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define N 20
struct lesson
{
int number;
char name[N];
char type[N];
int time;
char start[N];
float score;
struct lesson *next;
};
struct stu
{
float score;
char name[N];
char gender[N];
char number[N];
struct lesson ke[N];
struct stu *next;
int lesson_amout;
};
del_lesson(int *n,lesson **head)
{
int number;
printf("请输入要删除课程的编号:\n");
scanf("%d",&number);
struct lesson *p=*head;
if(p->number==number)
{
*head=p->next;
}
else
{
while(p!=NULL)
{
if(p->next&&p->next->number==number)
{
p->next=p->next->next;
}
p=p->next;
}
}
}
student_file(struct stu **head)//存入学生选课信息,存到一个名为“data2”的文本文件中
{
int i;
struct stu *p=*head;
FILE *fp;
fp=fopen("data2.txt","w");
if(fp!=NULL)
{
while(p)
{
fprintf(fp,"%s的课程信息为:\n",p->name);
for(i=0;i<p->lesson_amout;i++)
{
fprintf(fp,"课程名称:%s",p->ke[i].name);
fprintf(fp,"课程编号:%d",p->ke[i].number );
fprintf(fp,"课程学分:%f",p->ke[i].score);
fprintf(fp,"课程上课时间: %s",p->ke[i].start);
fprintf(fp,"课程课时:%d",p->ke[i].time);
fprintf(fp,"课程类型:%s",p->ke[i].type);
fprintf(fp,"\n");
}
p=p->next;
}
printf("文件保存成功!");
}
else
{
printf("文件保存失败!");
}
fclose(fp);
}
void insert_lesson(int *n,lesson **head)
{
int flag=1;
struct lesson *p=*head,*add,*p1=*head;
add=(struct lesson*)malloc(sizeof(struct lesson));
add->next=NULL;
printf("请输入课程编号:\n");
scanf("%d",&add->number);
while(p)
{
if(p->number!=add->number)
p=p->next;
else
{
flag=0;
printf("添加课程已存在!\n");
break;
}
}
if(flag==0)
{
return;
}
printf("请输入课程名称:\n");
scanf("%s",add->name);
printf("请输入课程性质:\n");
scanf("%s",add->type);
printf("请输入课时:\n");
scanf("%d",&add->time);
printf("请输入课程上课时间:\n");
scanf("%s",add->start);
printf("请输入学分:\n");
scanf("%f",&add->score);
if(flag==1)
{
while(p1&&p1->next)
{
p1=p1->next;
}
p1->next=add;
}
}
lesson_file(struct lesson **head)//存入课程信息:存入一个名为“data”的文本文件中
{
/*
printf("课程编号:%d ",p->number);
printf("课程名称:%s ",p->name);
printf("课程性质:%s ",p->type);
printf("课时:%d ",p->time);
printf("课程上课时间:%s ",p->start);
printf("学分:%f \n",p->score);
*/
char str[N],str1[N];
struct lesson *p=*head;
FILE *fp;
fp=fopen("data.txt","w");
if(fp!=NULL)
{
while(p)
{
fprintf(fp,"课程编号:%d 课程名称:%s 课程性质:%s 课时:%d 课程上课时间:%s 学分:%f \n",p->number,p->name,p->type,p->time,p->start,p->score);
p=p->next;
}
printf("文件保存成功!");
}
else
{
printf("文件保存失败!");
}
fclose(fp);
}
void creat_student(int *n,struct stu **head)
{
int i;
struct stu *tail,*p;
*head==NULL;
for(i=0;i<*n;i++)
{
p=(struct stu*)malloc(sizeof(struct stu));
p->next=NULL;
p->lesson_amout=0;
printf("请输入学生姓名:\n");
scanf("%s",p->name);
printf("请输入学生性别:\n");
scanf("%s",p->gender);
printf("请输入学生学号;\n");
scanf("%s",p->number);
p->score=0;
if(*head==NULL)
{
*head=p;
}
else
{
tail->next=p;
}
tail=p;
}
}
void del_student(int *n,struct stu **head)
{
char number[N];
printf("请输入要删除学生的学号:\n");
scanf("%s",number);
struct stu *p=*head;
if(strcmp(p->number,number)==0)
{
*head=p->next;
}
else
{
while(p!=NULL)
{
if(p->next&&strcmp(p->next->number,number)==0)
{
p->next=p->next->next;
}
p=p->next;
}
}
}
void insert_student(int *n,struct stu **head)
{
int flag=1;
struct stu *p=*head,*add,*p1=*head;
add=(struct stu*)malloc(sizeof(struct stu));
add->next=NULL;
printf("请输入学生学号:\n");
scanf("%s",add->number);
while(p)
{
if(strcmp(p->number,add->number)!=0)
p=p->next;
else
{
flag=0;
printf("添加学生已存在!\n");
break;
}
}
if(flag==0)
{
return;
}
printf("请输入学生姓名:\n");
scanf("%s",add->name);
printf("请输入学生性别:\n");
scanf("%s",add->gender);
if(flag==1)
{
while(p1&&p1->next)
{
p1=p1->next;
}
p1->next=add;
}
}
void out_lesson(int *n,struct lesson **head)
{
struct lesson *p=*head;
if(p!=NULL)
{
while(p!=NULL)
{
printf("课程编号:%d ",p->number);
printf("课程名称:%s ",p->name);
printf("课程性质:%s ",p->type);
printf("课时:%d ",p->time);
printf("课程上课时间:%s ",p->start);
printf("学分:%f \n",p->score);
p=p->next;
}
}
else
{
printf("暂无课程信息!\n");
}
}
out_student(int *n,struct stu **head)
{
struct stu *p=*head;
if(p!=NULL)
{
while(p!=NULL)
{
printf("学生学号:%s",p->number);
printf("学生姓名:%s ",p->name);
printf("学生性别:%s ",p->gender);
printf("学生学分:%f ",p->score);
printf("\n");
p=p->next;
}
}
else
{
printf("暂无学生信息!\n");
}
}
choose_student(struct stu **head1,struct lesson **head2)
{
int flag1=0,flag2=0,num2,i,flagtime=1;
char num[N];
struct stu *p1=*head1,*p_1=*head1;
struct lesson *p2=*head2,*p_2=*head2;
printf("请输入选课学生学号:\n");
scanf("%s",num);
while(p_1)
{
if(strcmp(p_1->number,num)==0)
{
flag1=1;
break;
}
p_1=p_1->next;
}
if(flag1==1)
{
p1=p_1;
printf("请输入课程编号;\n");
scanf("%d",&num2);
while(p_2)
{
if(p_2->number==num2)
{
flag2=1;
break;
}
p_2=p_2->next;
}
if(flag2==1)//有课有学生
{
if((p1->score+p_2->score)<=80)
{
for(i=0;i<p1->lesson_amout;i++)
{
/*if(strcmp(p1->ke[i].start,p_2->start)==0)
{
printf("该学生选课与已有课程时间冲突!\n");
}
else
{
i=p1->lesson_amout;
p1->ke[i]=*p_2;
p1->lesson_amout+=1;
p1->score+=p_2->score;
} */
if(strcmp(p1->ke[i].start,p_2->start)==0)
{
flagtime=0;
printf("该学生选课与已有课程时间冲突!\n");
break;
}
}
if(flagtime==1)//时间不冲突
{
i=p1->lesson_amout;
p1->ke[i]=*p_2;
p1->lesson_amout+=1;
p1->score+=p_2->score;
printf("选课成功!");
}
}
else
{
printf("该学生的总学分不得大于80!\n");
}
}
else
{
printf("该课程不存在!");
}
}
else
{
printf("该学生不存在!");
}
}
student_information(struct stu **head1,struct lesson **head2)
{
int flag1=0,flag2=0,num2,i;
char num[N];
struct stu *p1=*head1,*p_1=*head1;
struct lesson *p2=*head2,*p_2=*head2;
printf("请输入选课学生学号:\n");
scanf("%s",num);
while(p_1)
{
if(strcmp(p_1->number,num)==0)
{
flag1=1;
break;
}
p_1=p_1->next;
}
if(flag1==1)
{
printf("该学生的课程信息为:\n");
for(i=0;i<p1->lesson_amout;i++)
{
printf("课程名称:%s",p1->ke[i].name);
printf("课程编号:%d",p1->ke[i].number );
printf("课程学分:%f",p1->ke[i].score);
printf("课程上课时间: %s",p1->ke[i].start);
printf("课程课时:%d",p1->ke[i].time);
printf("课程类型:%s",p1->ke[i].type);
printf("\n");
}
printf("该学生总学分为:%.2f",p1->score);
}
else
{
printf("该学生不存在!");
}
}
void creat_lesson(int *n,struct lesson **head)
{
int i;
struct lesson *tail,*p;
*head==NULL;
for(i=0;i<*n;i++)
{
p=(struct lesson*)malloc(sizeof(struct lesson));
p->next=NULL;
printf("请输入课程编号:\n");
scanf("%d",&p->number);
printf("请输入课程名称:\n");
scanf("%s",p->name);
printf("请输入课程性质:\n");
scanf("%s",p->type);
printf("请输入课时:\n");
scanf("%d",&p->time);
printf("请输入课程上课时间:\n");
scanf("%s",p->start);
printf("请输入学分:\n");
scanf("%f",&p->score);
if(*head==NULL)
{
*head=p;
}
else
{
tail->next=p;
}
tail=p;
}
}
void meal()//显示菜单
{
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("-----11.保存课程信息----\n");
printf("-----12.保存学生信息----\n");
printf("-----13.退出程序--------\n");
printf("请在1-11中选择:") ;
}
int main()
{
struct lesson *new_lesson=NULL;
struct stu *new_student=NULL;
int choose,n=0,i,m=0;
//meal();
while(1)
{
meal();
scanf("%d",&choose);
if(choose==1)
{
system("cls");
printf("请输入需要创建课程的个数:\n");
scanf("%d",&n);
creat_lesson(&n,&new_lesson);
system("cls");
}
else if(choose==2)
{
system("cls");
del_lesson(&n,&new_lesson);
}
else if(choose==3)
{
system("cls");
insert_lesson(&n,&new_lesson);
}
else if(choose==4)
{
system("cls");
out_lesson(&n,&new_lesson);
}
else if(choose==5)
{
system("cls");
printf("请输入需要创建学生的个数:\n");
scanf("%d",&m);
creat_student(&m,&new_student);
system("cls");
}
else if(choose==6)
{
system("cls");
del_student(&m,&new_student);
}
else if(choose==7)
{
system("cls");
insert_student(&m,&new_student);
}
else if(choose==8)
{
system("cls");
out_student(&m,&new_student);
}
else if(choose==9)
{
system("cls");
choose_student(&new_student,&new_lesson);
}
else if(choose==10)
{
system("cls");
student_information(&new_student,&new_lesson);
}
else if(choose==11)
{
system("cls");
lesson_file(&new_lesson);
}
else if(choose==12)
{
system("cls");
student_file(&new_student);
}
else if(choose==13)
{
break;
}
else
{
printf("输入不符合要求,请重新输入:");
scanf("%d",&choose);
}
}
}