用c语言设计至少200行,C语言课程设计-学生选课系统.doc

#include#define LEN sizeof(struct course)

#define FORM "%d %s %s %d %d %d %d %d"

#define FORM1 "%5d%20s%20s%5d%5d%5d%5d%5d\n"

#define INPUT &p1->num,p1->name,p1->kind,&p1->all_time,&p1->class_time,&p1->experiment_time,&p1->grade,&p1->term

#define OUTPUT p1->num,p1->name,p1->kind,p1->all_time,p1->class_time,p1->experiment_time,p1->grade,p1->term

struct course

{int num;

char name[20];

char kind[10];

int all_time;

int class_time;

int experiment_time;

int grade;

int term;

//int flag;

struct course *next;};

void mune() //菜单函数

{

printf("************************************\n");

printf(" 1.录入信息 \n");

printf(" 2.浏览信息 \n");

printf(" 3.查询课程(按学分)\n");

printf(" 4.查询课程(按性质)\n");

printf(" 5.按选修课程查询\n");

printf(" 6.选课 \n");

printf(" 0.退出 \n");

printf("*************************************\n");

}

struct course* scan(FILE*fp) //输入课程信息

{

struct course*head; //链表头指针

struct course*p1,*p2; //指示指针

int n=0;

p1=p2=(struct course*)malloc(LEN); //开辟内存空间

printf("课程编号 课程名称 课程性质 课程总学时 教学用时 实验用时 学分 开课学期\n");

printf("请输入数据:");

scanf(FORM,INPUT); //输入数据

fprintf(fp,FORM1,OUTPUT);

head=NULL;

while(p1->num!=0) //链表结束的判断条件

{n=n+1;

if(n==1)

head=p1; //当在第一个结点时,头指针等于第一个结点的首地址

else

p2->next=p1;

p2=p1;

p1=(struct course*)malloc(LEN); //继续开辟内存空间

printf("请输入数据:");

scanf("%ld",&p1->num); //输入课程号

if(p1->num!=0) //判断课程号是否为0,如果为0,程序结束

{scanf("%s %s %d %d %d %d %d",p1->name,p1->kind,&p1->all_time,&p1->class_time,&p1->experiment_time,&p1->grade,&p1->term);

//p1->flag=0;

fprintf(fp,FORM1,OUTPUT);}

}

p2->next=NULL; //最后一个结点的值为空

fclose(fp); //关闭文件

return(head); //返回头指针

}

void print(struct course*head) //将输入的内容显示在屏幕上

{

struct course*p1;

if(head!=NULL) //如果头指针为空,则程序结束

p1=head;

else

goto end;

printf("课程编号 课程名称 课程性质 课程总学时 教学用时 实验用时 学分 开课学期\n");

do

{printf(FORM1,OUTPUT); //输出内容

p1=p1->next; //指针指向下一个结点

}while(p1!=NULL);

end:;

}

void search_grade(struct course*head) //按学分查询课程

{

struct course*p1;

int k,n;

n=0;

p1=head;

printf("请输入查询课程的学分:\n");

scanf("%d",&k);

while(p1!=NULL) //根据链表里面的内容输出

{if(k==p1->grade)

{printf("课程编号 课程名称 课程性质 课程总学时 教学用时 实验用时 学分 开课学期\n");

printf(FORM1,OUTPUT);

n++;}

p1=p1->next;}

if(n==0)

printf("无结果\n"); //如果没有课程,则输出无结果

}

void search_kind(struct course*head)//按课程性质查询

{

char a[10];

int n=0;

struct course*p1;

p1=head;

gets(a);

while(p1!=NULL)

{if(strcmp(a,p1->kind)==0) //用strcmp函数进行字符串的比较

{printf("课程编号 课程名称 课程性质 课程总学时 教学用时 实验用时 学分 开课学期\n");

printf(FORM1,OUTPUT); //如果相同,输出课程信息

n++;}

p1=p1->next;}

if(n==0)

printf("无结果\n");

}

void search_else(struct course*head) //查询所有选修课程

{

struct course*p1;

int n=0;

p1=head;

while(p1!=NULL)

{if(strcmp(p1->kind,"xuanxiu")==0)

{printf("课程编号 课程名称 课程性质 课程总学时 教学用时 实验用时 学分 开课学期\n");

printf(FORM1,OUTPUT);

n++;}

p1=p1->next;

}

if(n==0)

printf("没有选修课程\n");

}

void choose(struct course*head) //选课函数

{

struct course*p1;

int k,s=0; //s为所选课程的学分总数,K为所选课程的课程编号

if(head!=NULL)

{p1=head;

while(s<60) //判断选课是否结束

{

p1=head;

printf("请输入选择课程的课程编号:");

scanf("%d",&k);

while(p1!=NULL) //当遍历一遍链表之后,循环结束

{

if(k==p1->num) //当找到对应的课程编号后,输出课程信息

{s=s+p1->grade;

printf("课程编号 课程名称 课程性质 课程总学时 教学用时 实验用时 学分 开课学期\n");

printf(FORM1,OUTPUT);

printf("选课成功!\n");

break;}

else

p1=p1->next;

if(p1==NULL) //链表走到最后,则没有找到相应课程

printf("没有这门课程\n");

}

}

printf("学分达到要求\n");

}

}

void main()

{ struct course*head;

FILE*fp;

int k;

fp=fopen("课程list.txt","a+");

loop:mune(); //goto循环的开始位置

printf("请输入你的操作:\n");

scanf("%d",&k);

if(k!=0)

{switch(k) //利用switch语句实现菜单式工作

{case 1:head=scan(fp);break;

case 2:print(head);break;

case 3:search_grade(head);break;

case 4:search_kind(head);break;

case 5:search_else(head);break;

case 6:choose(head);break;

default:printf("操作不存在");}

goto loop;} //利用goto语句实现循环

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值