学生选课系统课设报告.docx

上传人:b****4 文档编号:6803934 上传时间:2023-05-10 格式:DOCX 页数:34 大小:184.79KB
下载 相关 举报
学生选课系统课设报告.docx_第1页
第1页 / 共34页
学生选课系统课设报告.docx_第2页
第2页 / 共34页
学生选课系统课设报告.docx_第3页
第3页 / 共34页
学生选课系统课设报告.docx_第4页
第4页 / 共34页
学生选课系统课设报告.docx_第5页
第5页 / 共34页
学生选课系统课设报告.docx_第6页
第6页 / 共34页
学生选课系统课设报告.docx_第7页
第7页 / 共34页
学生选课系统课设报告.docx_第8页
第8页 / 共34页
学生选课系统课设报告.docx_第9页
第9页 / 共34页
学生选课系统课设报告.docx_第10页
第10页 / 共34页
学生选课系统课设报告.docx_第11页
第11页 / 共34页
学生选课系统课设报告.docx_第12页
第12页 / 共34页
学生选课系统课设报告.docx_第13页
第13页 / 共34页
学生选课系统课设报告.docx_第14页
第14页 / 共34页
学生选课系统课设报告.docx_第15页
第15页 / 共34页
学生选课系统课设报告.docx_第16页
第16页 / 共34页
学生选课系统课设报告.docx_第17页
第17页 / 共34页
学生选课系统课设报告.docx_第18页
第18页 / 共34页
学生选课系统课设报告.docx_第19页
第19页 / 共34页
学生选课系统课设报告.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

学生选课系统课设报告.docx

《学生选课系统课设报告.docx》由会员分享,可在线阅读,更多相关《学生选课系统课设报告.docx(34页珍藏版)》请在冰点文库上搜索。

学生选课系统课设报告.docx

学生选课系统课设报告

*******************

实践教学

*******************

 

兰州理工大学

计算机与通信学院

2011年春季学期

 

C程序设计课程设计

 

题目:

学生选课系统

专业班级:

计算机1班

姓名:

ZWZ

学号:

10240136

指导教师:

周小健

成绩:

摘要

学生选课系统是一个教育单位不可缺少的重要系统组成部分,它对于学校的决策者、管理者管理、查看课程来说都有至关重要,所以学生选课管理系统应该能够为广大学、师生提供充足的信息和快捷的课程选择过程,有助于学生选好每一门课程,此系统选课方便、快捷,用简单的界面来展示学生的选课信息,应用简单明了、存储量大、可靠性高、保密性好、寿命长、成本低等优点,可以极大的提高对学生信息管理的效率。

利用C语言开发,实现了简单的学生课程信息的录入、修改、查询、删除等操作,并且能够利用文件系统长久的保留原始数据。

关键字:

c语言;选课系统;函数

目录

一、需求分析1

二、总体设计2

三、详细设计3

四、编码8

五、测试9

六、设计总结13

参考文献14

致谢15

附录16

一、需求分析

数据结构可用结构体,包括课程和选修两个结构体,其中课程结构体成员包括课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期。

选修结构体成员包括学号,课程编号,该结构体的建立主要是为了查询某门课程学生选修情况。

以此为基础,我们确定本系统完成以下功能:

1.完成课程信息的录入,

2.课程信息管理和查看,

3.学生信息录入,

4.学生信息查看和管理

5.学生选课,

6.学生已选课程查询。

二、总体设计

系统由哪几个功能模块构成,给出功能模块图。

C中模块化的工具是函数

根据上面的需求分析,可以将这个系统的设计分为如下七大模块:

选课模块、按学分查找模块、按编号查找模块、查看课程模块、查看选课情况模块、课程输入模块、完成选择模块,如图1。

图1菜单选择模块

三、详细设计

1.数据定义,如图2。

图2数据定义模块

2.算法流程图

(1)录入课程信息表,如图3。

图3录入课程信息

(2)课程管理,如图4。

图4课程信息管理

(3)录入学生信息,如图5。

图5录入学生信息

(4)学生信息管理,如图6。

图6学生信息管理

(5)学生选课,如图7。

学生选课

图7学生选课表

(6)系统信息及查看系统,如图8。

图8系统信息查看系统

(7)退出系统,如图9。

图9退出系统

四、编码

1.structcouse*head1;结构

2.voidkeyboardc()//录入课程子函数(从键盘录入)

3.voidfilec()//录入键盘子函数(从文件录入)

4.voidinputc()//录入课程主函数

5.voidinsertc(structcouse*incouse)//课程管理子函数(增加课程)

6.voiddelc(intnum1)//课程管理子函数(删除课程)

7.voidelect(structstudent*s)//选课

8.voidcheak()//学生选课子函数(查询可选课程)

9.voidback(structstudent*p)//退课

10.voidhcheak()//学生选课子函数(查询已选课程)

11.voidelective()//学生选课主函数

12.voidlistc()//输出课程信息

13.voidlists()//输出学生信息

14.voidintoc()//存储课程信息

15.voidintos()//存储学生信息

16.voidinto()//存储信息

17.voidstore()//信息主函数

18.intmain()//主函数

五、测试

1.主菜单,如图10.

图10主菜单

2.录入课程信息,如图11.

图11录入课程信息

3.从文件输入,如图12.

图12文件输入

4.学生选课菜单,如图13

图13学生选课菜单.

5.学生信息管理,如图14.

图14学生信息管理

6.管理员输入课程信息界面,如图15.

图15输入课程信息

六、设计总结

问题一:

无法读取文txt文件。

困难就是txt无法读取,输入路径后没有文件显示。

解决办法是,向老师求助。

最后,在老师细心的指导下,才知道是自己的计算机操作水平缘故,没有很好的了解计算机路径结构,最后做出了一定的修改,才得以实现。

问题二:

程序错误。

这是一个比较典型的错误,通过查阅书本相关资料。

才发觉是函数相关问题,没有能够很好的理解函数思想,导致程序运行错误。

参考文献

1.姜灵芝,余健.C语言课程设计案例精编.北京:

清华大学出版社,2008

2.王新,孙雷.C语言课程设计.北京:

清华大学出版社,2009

3.游洪跃、彭骏、谭斌.C语言程序设计实验与课程设计教程.北京:

清华大学出版社,2011

4.王连相.C/C++程序设计上机指导与测试.北京:

中国铁道出版社,2006

5.C语言函数手册,机械工业出版社,1999

致谢

在这次c语言课程设计中,首先得感谢周老师给予我们指导与帮助,在她的指导帮助下,才使得我们能够顺利的完成课程设计,更重要的是在这次课程设计中,极大的提高我的c语言设计能力,也让我深刻的了解到自己在这方面的诸多不足,使得我能更清楚的了解自己的水平,加强了我对这门学科的认识。

同时也感谢和我一起完成这课设的王云龙同学,我们在互相交流帮助中也相互学习到许多小的应用技巧,解决了一系列问题。

还要感谢那些给予我们帮助的同学,也给了我很大的帮助。

附录

#include

#include

intN1,N2,kk1,kk2,kk3;

structcouse*head1;

structstudent*head2;

structcouse//课程信息结构体

{

intnum1;//课程编号

charname1[20];//课程名称

charxinzhi[30];//课程性质i

intztime;//课程总学时

intstime;//授课学时

intshiyan;//实验学时

intscore;//学分

longintdate;//开学学期

intnelepeo;//课程已选人数

intMelepeo;//课程人数上限

structcouse*next;

};

structstudent//学生信息结构体

{

intnum2;

charname2[20];

intnelenum[50];//已选课程编号

intnelen;//已选课程数量

structstudent*next;

};

voidMs()

{

for(kk1=0;kk1<1100;kk1++)

for(kk2=0;kk2<1200;kk2++)

for(kk3=0;kk3<1200;kk3++);

}

voidkeyboardc()//录入课程子函数(从键盘录入)

{

structcouse*p1,*p2;

N1=0;

p1=p2=(structcouse*)malloc(sizeof(structcouse));

printf("课程编号课程名称课程性质总学时授课学时实验学时学分开课学期人数上限\n");

scanf("%d%s%s%d%d%d%d%d",&p1->num1,p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1->score,&p1->date,&p1->Melepeo);

p1->nelepeo=0;

head1=NULL;

while(p1->num1!

=0)

{

N1=N1+1;

if(N1==1)head1=p1;

elsep2->next=p1;

p2=p1;

p1=(structcouse*)malloc(sizeof(structcouse));

scanf("%d%s%s%d%d%d%d%d",&p1->num1,p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1->score,&p1->date,&p1->Melepeo);

p1->nelepeo=0;

}

p2->next=NULL;

}

voidfilec()//录入键盘子函数(从文件录入)

{

FILE*fp;

charfilepath[20];

structcouse*p1,*p2;

N1=0;

printf("输入要读入的文件路径:

");

getchar();

gets(filepath);

if((fp=fopen(filepath,"r"))==NULL)

{

printf("找不到%s文件!

\n",filepath);

exit(0);

}

p1=p2=(structcouse*)malloc(sizeof(structcouse));

fscanf(fp,"%d%s%s%d%d%d%d%d",&p1->num1,&p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1->score,&p1->date,&p1->Melepeo);

printf("课程编号课程名称课程性质总学时授课学时实验学时学分开课学期人数上限\n");

fprintf(stdout,"%d\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p1->num1,p1->name1,p1->xinzhi,p1->ztime,p1->stime,p1->shiyan,p1->score,p1->date,p1->Melepeo);

head1=NULL;

while(!

feof(fp))

{

N1=N1+1;

if(N1==1)head1=p1;

elsep2->next=p1;

p2=p1;

p1=(structcouse*)malloc(sizeof(structcouse));

fscanf(fp,"%d%s%s%d%d%d%d%d",&p1->num1,p1->name1,&p1->xinzhi,&p1->ztime,&p1->stime,&p1->shiyan,&p1->score,&p1->date,&p1->Melepeo);

fprintf(stdout,"%d%s%s%d%d%d%d%d%d\n",p1->num1,p1->name1,p1->xinzhi,p1->ztime,p1->stime,p1->shiyan,p1->score,p1->date,p1->Melepeo);

}

p2->next=NULL;

}

voidinputc()//录入课程主函数

{

inti;

printf("\t\t\t录入课程信息\n");

printf("\n1.从键盘录入\n");

printf("2.从文件录入\n");

printf("3.返回主菜单\n");

printf("请选择(1~3):

\n");

scanf("%d",&i);

switch(i)

{

case

(1):

keyboardc();break;

case

(2):

filec();break;

case(3):

break;

}

}

voidinsertc(structcouse*incouse)//课程管理子函数(增加课程)

{

structcouse*p0,*p1,*p2;

p1=head1;

p0=incouse;

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;

elsep2->next=p0;

p0->next=p1;

}

else

{

p1->next=p0;p0->next=NULL;

}

}

N1=N1+1;

}

voiddelc(intnum1)//课程管理子函数(删除课程)

{

structcouse*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;

elsep2->next=p1->next;

printf("已删除该编号课程!

\n");

N1=N1-1;

}

elseprintf("无该编号的课程!

\n");

end:

;

}

voidmanagementc()//课程管理主函数

{

structcouse*incouse;

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)

{

case

(1):

{

incouse=(structcouse*)malloc(sizeof(structcouse));

printf("课程编号课程名称课程性质总学时授课学时实验学时学分开课学期人数上限\n");

scanf("%d\n%s\n%s\n%d\n%d\n%d\n%d\n%d\n%d\n",&incouse->num1,&incouse->name1,&incouse->xinzhi,&incouse->ztime,&incouse->stime,&incouse->score,&incouse->date,&incouse->Melepeo);

incouse->nelepeo=0;

insertc(incouse);

break;

}

case

(2):

{

printf("请输入要删除课程的编号:

\n");

scanf("%d",&num1);

delc(num1);

break;

}

case(3):

break;

}

}

voidkeyboards()//录入学生信息子函数(从键盘录入)

{

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;

elsep2->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;

}

voidfiles()//录入学生信息子函数(从文件录入)

{

inti=0;

FILE*fp;

charfilepath[20];

structstudent*p1,*p2;

N2=0;

printf("输入要读入的文件路径:

");

getchar();

gets(filepath);

if((fp=fopen(filepath,"r"))==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;

elsep2->next=p1;

p2=p1;

p1=(structstudent*)malloc(sizeof(structstudent));

fread(p1,sizeof(structstudent),1,fp);

}

p2->next=NULL;

}

voidinputs()//录入学生信息主函数

{

inti;

printf("\t\t\t录入学生信息\n");

printf("\n1.从键盘录入\n");

printf("2.从文件录入\n");

printf("3.返回主菜单\n");

printf("请选择(1~3):

\n");

scanf("%d",&i);

switch(i)

{

case

(1):

keyboards();break;

case

(2):

files();break;

case(3):

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;

elsep2->next=p1->next;

printf("已删除该学生信息!

\n");

N2=N2-1;

}

elseprintf("无该学号的学生!

\n");

end:

;

}

voidmanagements()//学生信息管理主函数

{

structstudent*incouse;

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)

{

case

(1):

{

incouse=(structstudent*)malloc(sizeof(structstudent));

incouse->nelen=0;

incouse->nelenum[0]=0;

printf("学生学号\t学生姓名\n");

scanf("%d%s",&incouse->num2,incouse->name2);

inserts(incouse);

break;

}

case

(2):

{

printf("请输入要删除学生的学号:

\n");

scanf("%d",&num2);

dels(num2);

break;

}

case(3):

break;

}

}

voidelect(structstudent*s)//选课

{

structcouse*p;

intnum1,i;

printf("请输入要选课的编号:

\n");

scanf("%d",&num1);

for(i=0;s->nelenum[i]!

=0;i++);

s->nelenum[i]=num1;

(s->nelen)++;

p=head1;

while(p->num1!

=num1)p=p->next;

(p->nelepeo)++;

}

voidcheak()//学生选课子函数(查询可选课程)

{

chare;

structcouse*c;

structstudent*s;

intnum2,i,j=0,t=0;

printf("请输入你的学号:

");

scanf("%d",&num2);

s=head2;

while(s->num2!

=num2&&s->next!

=NULL)s=s->next;

if(s->num2!

=num2)

{

printf("不存在你的信息,请进入主菜单录入你的信息!

\n");

gotoend;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2