C语言学生选课系统代码.docx
- 文档编号:26809779
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:24
- 大小:17.63KB
C语言学生选课系统代码.docx
《C语言学生选课系统代码.docx》由会员分享,可在线阅读,更多相关《C语言学生选课系统代码.docx(24页珍藏版)》请在冰豆网上搜索。
C语言学生选课系统代码
#include
#include
#include
intN1,N2;
structstudent
{
intnum2;
charname2[20];
intnelenum[50];//所选课程编号
intnelen;//所选课程学分和
structstudent*next;
};
structcourse
{
intnum1;//课程编号
charname1[20];
charmajor[20];
chartype[20];
intcredit;
intperiod;
charteacher[20];
intpeople;//选此门课程的人数
structcourse*next;//结构体指针
};
structcourse*head1;
structstudent*head2;
voidzhang()//从键盘录入课程信息
{
structcourse*p1,*p2;
N1=0;
p1=p2=(structcourse*)malloc(sizeof(structcourse));
printf("课程编号\t课程名称\t主修\t课程性质\t学分\t课时\t教师\n");
scanf("%d%s%s%s%d%d%s",&p1->num1,p1->name1,p1->major,p1->type,&p1->credit,&p1->period,p1->teacher);
p1->people=0;
head1=NULL;
while(p1->num1!
=0)
{
N1=N1+1;
if(N1==1)head1=p1;
elsep2->next=p1;
p2=p1;
p1=(structcourse*)malloc(sizeof(structcourse));
scanf("%d%s%s%s%d%d%s",&p1->num1,p1->name1,p1->major,p1->type,&p1->credit,&p1->period,p1->teacher);
p1->people=0;
}
p2->next=NULL;
}
voidzhang1()//从文件录入课程信息
{
FILE*fp;
charfilepath[20];
structcourse*p1,*p2;
N1=0;
printf("请输入您要读取的路径:
");
getchar();
gets(filepath);
if((fp=fopen(filepath,"r"))==NULL)
{
printf("找不到%s文件!
\n",filepath);
exit(0);
}
p1=p2=(structcourse*)malloc(sizeof(structcourse));
fscanf(fp,"%d%s%s%s%d%d%s%d",&p1->num1,p1->name1,p1->major,p1->type,&p1->credit,&p1->period,p1->teacher,&p1->people);
while(!
feof(fp))
{
N1=N1+1;
if(N1==1)
head1=p1;
else
p2->next=p1;
p2=p1;
p1=(structcourse*)malloc(sizeof(structcourse));
fscanf(fp,"%d%s%s%s%d%d%s%d",&p1->num1,p1->name1,p1->major,p1->type,&p1->credit,&p1->period,p1->teacher,&p1->people);
}
p2->next=NULL;
}
voidload()//录入课程信息函数
{
inti;
printf("\t\t\t录入课程信息\n");
printf("\n1.从键盘录入");
printf("\n2.从文件录入");
printf("\n3.返回主菜单\n");
printf("请选择1-3:
");
scanf("%d",&i);
switch(i)
{
case1:
zhang();break;
case2:
zhang1();break;
case3:
break;
}
}
voidinsert(structcourse*incourse)//增加课程信息
{
structcourse*p0,*p1,*p2;
p1=head1;
p0=incourse;
if(head1==NULL)
{
head1=p0;
p0->next=NULL;
}
else
{
while((p0->num1>p1->num1)&&(p1->next!
=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num1<=p1->num1)
{
if(head1==p1)
head1=p0;
else
p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
N1=N1+1;
}
voiddelc(intnum1)//删除课程信息
{
structcourse*p1,*p2;
if(head1==NULL)
{
printf("\n无法删除!
\n");
gotoend;
}
p1=head1;
while(num1!
=p1->num1&&p1->next!
=NULL)
{
p2=p1;
p1=p1->next;
}
if(num1==p1->num1)
{
if(p1==head1)
head1=p1->next;
else
p2->next=p1->next;
printf("已删除\n");
N1=N1-1;
}
else
printf("没有此课程\n");
end:
;
}
voidmanagementc()//课程信息管理函数
{
structcourse*p1;
inti,num1;
printf("\t\t\t课程信息管理\n");
printf("1.添加课程\n");
printf("2.删除课程\n");
printf("3.返回\n");
printf("请输入1-3:
\n");
scanf("%d",&i);
switch(i)
{
case1:
{p1=(structcourse*)malloc(sizeof(structcourse));
printf("课程编号\t课程名称\t主修\t课程性质\t学分\t课时\t教师\n");
scanf("%d%s%s%s%d%d%s",&p1->num1,p1->name1,p1->major,p1->type,&p1->credit,&p1->period,p1->teacher);
p1->people=0;
insert(p1);
}break;
case2:
printf("请输入您要删除的课程编号:
\n");
scanf("%d",&num1);
delc(num1);break;
case3:
break;
}
}
voidputin(void)//从键盘录入学生信息
{
inti;
structstudent*p1,*p2;
N2=0;
p1=p2=(structstudent*)malloc(sizeof(structstudent));
printf("学号\t姓名\n");
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++)p1->nelenum[i]=0;
head2=NULL;
while(p1->num2!
=0)
{
N2=N2+1;
if(N2==1)
head2=p1;
else
p2->next=p1;
p2=p1;
p1=(structstudent*)malloc(sizeof(structstudent));
scanf("%d%s",&p1->num2,p1->name2);
p1->nelen=0;
for(i=0;i<20;i++)p1->nelenum[i]=0;
}
p2->next=NULL;}
voidputin2()//从文件录入学生信息
{
inti=0;
FILE*fp;
charfilepath[20];
structstudent*p1,*p2;
N2=0;
printf("请输入您要读取的路径:
");
getchar();
gets(filepath);
if((fp=fopen(filepath,"rt"))==NULL)
{
printf("找不到%s文件!
\n",filepath);
exit(0);
}
p1=p2=(structstudent*)malloc(sizeof(structstudent));
fread(p1,sizeof(structstudent),1,fp);
head2=NULL;
while(!
feof(fp))
{
i=0;
N2=N2+1;
if(N2==1)
head2=p1;
else
p2->next=p1;
p2=p1;
p1=(structstudent*)malloc(sizeof(structstudent));
fread(p1,sizeof(structstudent),1,fp);
}
p2->next=NULL;
}
voidinput()//录入学生信息函数
{
inti;
printf("\t\t\t录入学生信息\n");
printf("\n1.从键盘录入\n");
printf("2.从文件录入\n");
printf("3.返回主菜单\n");
printf("请输入1-3:
\n");
scanf("%d",&i);
switch(i)
{
case1:
putin();break;
case2:
putin2();break;
case3:
break;
}
}
voidinserts(structstudent*incouse)//增加学生信息
{
structstudent*p0,*p1,*p2;
p1=head2;
p0=incouse;
if(head2==NULL)
{
head2=p0;
p0->next=NULL;
}
else
{
while((p0->num2>p1->num2)&&(p1->next!
=NULL))
{
p2=p1;
p1=p1->next;
}
if(p0->num2<=p1->num2)
{
if(head2==p1)head2=p0;
elsep2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;}
}
N2=N2+1;
}
voiddels(intnum2)//删除学生信息
{
structstudent*p1,*p2;
if(head2==NULL)
{
printf("\n无法删除\n");
gotoend;
}
p1=head2;
while(num2!
=p1->num2&&p1->next!
=NULL)
{
p2=p1;
p1=p1->next;
}
if(num2==p1->num2)
{
if(p1==head2)
head2=p1->next;
else
p2->next=p1->next;
printf("已删除\n");
N2=N2-1;
}
else
printf("没有此学生编号\n");
end:
;
}
voidmanagements()//学生信息管理函数
{
structstudent*p1;
inti,num2;
printf("\t\t\t学生信息管理\n");
printf("1.添加学生信息\n");
printf("2.删除学生信息\n");
printf("3.返回主菜单\n");
printf("请选择1-3:
\n");
scanf("%d",&i);
switch(i)
{
case1:
{p1=(structstudent*)malloc(sizeof(structstudent));
p1->nelen=0;
p1->nelenum[0]=0;
printf("num\tname\n");
scanf("%d%s",&p1->num2,p1->name2);
inserts(p1);}break;
case2:
{printf("请输入您要删除的学生编号:
\n");
scanf("%d",&num2);
dels(num2);
}break;
case3:
break;
}
}
voidelect()//学生选课
{
structstudent*s;
structcourse*p;
inta,i,b;
printf("请输入您的学号:
\n");
scanf("%d",&a);
s=head2;
while((s->num2)!
=a&&s->next!
=NULL)s=s->next;
if(s->num2!
=a)
{
printf("您的信息不存在,请重新输入:
\n");
gotoend;
}
if((s->nelen)>10)
{
printf("您的学分已满");
gotoend;
}
printf("请输入您要选修的课程编号\n");
scanf("%d",&b);
for(i=0;(s->nelenum[i])==0;i++);
s->nelenum[i]=b;
p=head1;
while((p->num1)!
=b)
p=p->next;
for(i=0;(s->nelenum[i])!
=0;i++);
s->nelenum[i]=b;
(p->people)++;
(s->nelen)=(s->nelen)+(p->credit);
(p->people)++;
end:
;
}
voidback()//学生退课
{
structstudent*p;
structcourse*p1;
intb,i,j,a;
printf("请输入您的学号:
\n");
scanf("%d",&a);
p=head2;
while(p->num2!
=a&&p!
=NULL)p=p->next;
if(p==NULL)
printf("您的信息不存在:
\n");
else
{
printf("请输入您要退选的课程:
\n");
scanf("%d",&b);
p1=head1;
while(p1->num1!
=b)p1=p1->next;
for(i=0;p->nelenum[i]!
=b;i++);
for(j=i;p->nelenum[j]!
=0;j++)
p->nelenum[j]=p->nelenum[j+1];
p->nelenum[--j]=0;
(p->nelen)=(p->nelen)-(p1->credit);
(p1->people)--;
printf("succeed!
\n");
}
}
voidelective()//学生选课信息管理
{
inti;
printf("\t\t\t学生选课信息管理\n");
printf("1.选课\n");
printf("2.退课\n");
printf("3.返回主菜单\n");
printf("请输入1-3:
\n");
scanf("%d",&i);
switch(i)
{
case1:
elect();break;
case2:
back();break;
case3:
break;
}
}
voidlistc()//浏览课程信息
{
structcourse*p;
p=head1;
printf("课程编号课程名称主修课程性质学分课时教师选课人数\n");
while(p!
=NULL)
{
printf("%6d%13s%13s%10s%7d%7d%12s%5d\n",p->num1,p->name1,p->major,p->type,p->credit,p->period,p->teacher,p->people);
p=p->next;
}
}
voidlists()//浏览学生信息
{
structstudent*p;
inta;
p=head2;
printf("学生编号学生姓名所选课程编号所选课程学分\n");
while(p!
=NULL)
{
printf("%6d%13s",p->num2,p->name2);
printf("%6d",p->nelen);
for(a=0;p->nelenum[a]!
=0&&a<14;a++)
printf("%d",p->nelenum[a]);
printf("\n");
p=p->next;
}
}
voidintoc()//存储课程信息
{
FILE*fp;
structcourse*p;
charfilepath[30];
printf("输入路径:
");
getchar();
gets(filepath);
if((fp=fopen(filepath,"w"))==NULL)
{
printf("\无法储存!
");
exit(0);
}
p=head1;
while(p!
=NULL)
{
fprintf(fp,"%d%s%s%s%d%d%s%d\n",p->num1,p->name1,p->major,p->type,p->credit,p->period,p->teacher,p->people);
p=p->next;
}
fclose(fp);
printf("已储存入%s文件!
\n",filepath);
}
voidintos()//存储学生信息
{
FILE*fp;
structstudent*p;
charfilepath[30];
printf("请输入路径:
");
getchar();
gets(filepath);
if((fp=fopen(filepath,"wt"))==NULL)
{
printf("\n无法储存!
");
exit(0);
}
p=head2;
while(p!
=NULL)
{
fwrite(p,sizeof(structstudent),1,fp);
p=p->next;
}
fclose(fp);
printf("已储存入%s文件!
\n",filepath);
}
voidinto()//信息存储函数
{
inti;
printf("\t\t\t信息存储\n");
printf("1.课程信息存储\n");
printf("2.学生信息存储t\n");
printf("3.返回主菜单\n");
printf("请输入1-3\n");
scanf("%d",&i);
switch(i)
{
case
(1):
intoc();break;
case
(2):
intos();break;
case(3):
break;
}
}
voidstore()//信息存储浏览函数
{
inti;
printf("\t\t信息存储和浏览\n");
printf("1.课程信息浏览\n");
printf("2.学生信息浏览\n");
printf("3.信息存储\n");
printf("4.返回主菜单\n");
printf("请输入1-4:
\n");
scanf("%d",&i);
switch(i)
{
case
(1):
listc();break;
case
(2):
lists();break;
case(3):
into();break;
case(4):
break;
}
}
voidsearch1()//按学生编号查找学生信息
{
inta,b;
structstudent*p;
printf("请输入学生编号");
scanf("%d",&a);
p=head2;
printf("学号学生姓名所选课程编号所选课程学分\n");
while(p!
=NULL)
{
if(p->num2==a)
{
printf("%6d%13s",p->num2,p->name2);
for(b=0;p->nelenum[b]!
=0&&b<14;b++)
printf("%d",p->nelenum[b]);
printf("%10d\n",p->nelen);
}
p=p->next;
}
}
voidsearch2()//按学生姓名查找学生信息
{
intb;
charname[20];
structstudent*p;
printf("请输入要查找的学生姓名:
");
scanf("%s",name);
p=head2;
printf("学号学生姓名所选课程编号所选
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 选课 系统 代码