学生选修课程系统设计—C语言课程设计

更新时间:2024-06-19 08:03:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言课程设计报告 学生选修课系统设计

一、设计目的

当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息系统的环境。计算机的最到好处的于利用它能够进行信息管理,使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。

尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好学生选课信息而设计的。

数据处理手工操作,工作量大,出错率高,出错后不易更改,造成了时间上的浪费。

基于这个问题,我认为有必要建立一个学生选课系统,使学生选课信息管理工作规范化、系统化、程序化,避免学生选课管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改选课情况。

二、题目说明

假定有n门课程,每门课程都有课程编号,课程名称,课程性质,总学时,

授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供一下功能:

(1) 系统以菜单方式工作;

(2) 课程信息和学生信息的录入功能(课程信息有文件保

存)----输入;

(3) 课程信息浏览功能----输出;

(4) 查询功能(至少一种查询方式)---算法; (5) 按学分查询;

(6) 某门课程学生选修情况(可选项)。 [提示]

数据结构可用结构体,包括课程和选秀两个结构体,其中课程结构体包括课程编号、课程名称、课程性质、总学时、授课学时、实验或上机学时、学分、开课学期。选修结构体成员包括学号,课程编号,该结构体的建立主要是为了查询某门课程学生选修情况.。

三、数据结构设计

0

C语言课程设计报告

本系统的实现,全部采用链表这种数据结构,用链表实现课程的查找、添加、删除、课程的选修、追加选修的课程,课程信息采用结构体这种数据结构。 typedef struct subjects {

int num; //课程编号 char name[20]; //课程名称 char kind[10]; //课程性质 int stime; //总学时 int ttime; //授课学时

int etime; //实验或上机学时 int score; //学分

int term; //开课学期 struct subjects *next; }SUB;

SUB *head=NULL;

四、程序分析

现代的社会是信息化的社会,信息无所不在。在生产领域、流通领域、各个部门每天都和信息打交道,如何处理如此多的信息成为了一个重要的课题。学生在学期开始选课是教学活动中的一个重要环节,该环节如果能管理好,它不仅能加快学生的选课速度,也提高了整个活动的效率。

大学一般都有上千名学生,每学期开始学生都要选课,因而产生了大量的课程信息。考虑到用户使用的方便和处理的信息量系统要完成录入,保存,查询,修改和删除课程信息的各种过程,能打印出课程信息表。 对象:

系统的主要使用对象是需要选课的学生。学生在选课是要察看各个课程的详细信息,还要选择一些感兴趣的课程,需要生成课表,在发现课程有冲突后能够修改先前选择的信息。需要随学生选课的变化,计算相应的总学分。在全部选定后,打印报表。系统还需要管理员来查看和修改学生的总体选课情况课程信息和学生信息。

五、程序设计大纲

1

C语言课程设计报告

主 模 块 管理员模块 学生模块 浏 查 览 询 课 课 程 程 添 删 加 除 课 课 程 程 浏 查览 询所 课有 程课信程 息 选浏择览选我修选课修程 的课程 删除错选的课程 2

C语言课程设计报告

六、模块设计

(一) 主函数,头文件及结构体声明

主函数设计地比较简洁,只是提供一个主菜单,switch语句将整个程序分为两个大的功能模块: 进入选课系统 选择序号进行选课 进入下一层 [程序]

#include \#include \#include \#include\void prin1(); void choose();

typedef struct subjects //课程结构体 { int num; //课程编号 char name[20]; //课程名称 char kind[10]; //课程性质 int stime; //总学时 int ttime; //授课学时 int etime; //实验或上机学时 int score; //学分 int term; //开课学期 struct subjects *next; }SUB;

SUB *head=NULL;

int main() { int n,w=1; do { system(\

3

C语言课程设计报告

puts(\puts(\以管理员身份登录\\n\puts(\以学生身份登录\\n\puts(\退出\

puts(\printf(\scanf(\switch(n) { case 1:Mangers() ;break; case 2:Students();break; case 3:w=0;break; default:; } }

while(w==1); return 0; }

(二) 管理员功能模块

管理员的功能一共有四个功能:浏览,查询,添加,删除课程,运用字符串处理函数处理密码的问题,用一个switch语句实现函数的调用:

管理员登录菜单 i=3 是 i>0 否 输入密码 是 进行码匹对验证 否 进入管理员界面 按任意键退出 4

C语言课程设计报告

printf(\课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\\n\

for(ptr=head;ptr;ptr=ptr->next) if(ptr->score==num) {

printf(\ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);

t=0; } if(t) printf(\未找到!\\n\ t=1; system(\ goto L1; case 4:break; } }t=0; } if(t)

printf(\未找到!\\n\t=1;

system(\goto L1;

case 4:break; //退出查找

} }

(七) 插入链表模块

插入链表操作主要用于添加课程,在整个课程信息中加入一些新课程,它在添加模块中被调用:

15

C语言课程设计报告

插入链表模块 SUB *p1,*p2; p1=subj; 是 head==NULL 否 head=p1; head->next=NULL; 是 否 p2=head;p2; 是 p2->next==NULL 否 p2->next=subj; subj->next=NULL; break;

[程序]

void *myInsert(SUB *subj) //链表插入操作 {

SUB *ptr,*ptr2; ptr=subj; if(head==NULL) { head=ptr; head->next=NULL; } else {

eturn head;

16

C语言课程设计报告

for(ptr2=head;ptr2;ptr2=ptr2->next) if(ptr2->next==NULL) { ptr2->next=subj;

插入课程信息 SUB *ptr,*subj; int size=sizeof(SUB); char ch,ch1; 是 ch!='0' 否 输入(课程信息、课程编号、课程名称、课程性质、总学分、授课学分、实践或上机学时) myInsert(subj); printf(\继续插入请按回车\\ C语言课程设计报告 ch1=getchar(); ch=getchar(); }

subj->next=NULL; break; } }

return head;

Return head;

(八) 添加模块

添加模块主要用于增加课程信息,采用链表的操作:

17

C语言课程设计报告

[程序]

void *insert() //插入课程信息 { SUB *ptr,*subj; int size=sizeof(SUB); char ch,ch1; while(ch!='0') {

subj=(SUB *)malloc(size); ptr=subj;

printf(\输入要插入的课程信息:\\n\

printf(\请输入课程编号:\ printf(\请输入课程名称:\ printf(\请输入课程性质:\ printf(\请输入总学时:\printf(\请输入授课学时:\printf(\请输入实践或上机学时:\scanf(\

printf(\请输入学分:\printf(\请输入开课学期:\myInsert(subj);

printf(\继续插入请按回车\\n\printf(\结束添加课程按 0: [ ]\\b\\b\

ch1=getchar(); /*将回车键赋给CH1,否则subj->term输完后输入的回车键会赋给CH,因此用CH1填补。*/

ch=getchar(); } return head; }

(九) 删除模块

删除模块主要用于管理员删除课程信息学生删除自己的选课,全部采用删除链表中的某一个节点的操作:

18

C语言课程设计报告

删除选修课程 SUB *p1,*p2; char ch,ch1; int num printf(输入想要删除的课程编号); scanf(\进行编号查找并删除 printf(\继续删除请按回车\\n\printf(\结束删除课程按 0: \19

C语言课程设计报告

[程序]

void *del() //删除课程- { SUB *p1,*p2; char ch,ch1; int num; while(ch!='0') { printf(\输入想要删除的课程编号:[ ]\\b\\b\\b\\b\\b\ scanf(\ if(head->num==num) { p2=head; head=head->next; free(p2); } if(head==NULL) return NULL; p1=head; p2=head->next; while(p2) { if(p2->num==num) { p1->next=p2->next; free(p2); } else p1=p2; p2=p1->next; } printf(\继续删除请按回车\\n\ printf(\结束删除课程按 0: [ ]\\b\\b\ ch1=getchar(); //将回车键赋给CH1,否则num输完后再输入的回车键会赋给CH,因此用CH1填补。

ch=getchar(); } return head; system(\}

20

C语言课程设计报告

) 选修课程模块

选修课程模块采用插入链表的操作:

选新课程 printf(\输入要选修的课程的编号\\n\printf(\如果确认输入完要选修的课程的编号,请输入0\ 程序对输入的信息进行查找判断 printf(“选修成功! \\n\printf(\以上信息全部保存在'my_sub.txt'中\\n\

[程序]

void choose() //选新课程 { SUB *p,*q;

21

(十

C语言课程设计报告

int a[5]; int num,total=0,i=0,j; printf(\输入要选修的课程的编号,编号之间以空格分开\\n\ scanf(\ printf(\如果确认输入完要选修的课程的编号,请输入0: [ ]\\b\\b\ while(num!=0) { for(p=head;p;p=p->next) if(p->num==num) { total=total+p->score; a[i]=num; i++; } scanf(\ } if(total<60) { printf(\选修总学分为%d,未达到60,选修失败!\\n\ system(\ } else {

Int FILE,fp; FILE *fp; fp=fopen(\ for(j=0;jnext) if(q->num==a[j]) fprintf(fp,\>name,q->kind,q->stime,q->ttime,q->etime,q->score,q->term); fclose(fp); printf(\选修成功!****\\n\ printf(\您选修的课程总学分为%d,课程分别为:\\n\ printf(\课程编号 课程名称 课程性质 总学时 授课学时 实践或上机学时 学分 开课学期\\n\

for(j=0;jnext) if(q->num==a[j]) printf(\

me,q->kind,q->stime,q->ttime,q->etime,q->score,q->term);

printf(\以上信息全部保存在'my_sub.txt'中\\n\ }

22

C语言课程设计报告

}

(十一) 读取文件模块

读取文件模块是用来读出文件内容,并将内容输出到内存中,当输入文件名时,就能打开指定的文件,当输入all_sub.txt时,打开所有课程信息的文件,当输入my_sub.txt时,就是浏览学生选修的课程信息。

读取文件 system(\

printf(\请输入课程信息所在的文件名称:\!feof(fp) c=fgetc(fp))=='\\n' !feof(fp) newSub=(SUB*)malloc(sizeof(SUB)); fscanf(fp,&newSub->num,newSub->name,newSub->kind,&newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term); myInsert(newSub); fclose(fp);

[程序]

void readfile() //阅读文件 {

23

C语言课程设计报告

void *myInsert(SUB*);

SUB *newSub; //新课程 int num,stime,ttime,etime; int score,term;

char c,name[20],kind[10],fname[20]; FILE *fp;

fp=fopen(\ while(!feof(fp)) {

newSub=(SUB*)malloc(sizeof(SUB));

fscanf(fp,\->kind,&newSub->stime,&newSub->ttime,&newSub->etime,&newSub->score,&newSub->term);

myInsert(newSub); }

fclose(fp);

}(十二) 保存文件模块

保存文件模块共分为两个子程序,分别是将修改的信息保存到all_sub.txt和my_sub.txt文件中: [程序

void savefile() //保存文件 {SUB *p;

FILE *fp;fp=fopen(\if(fp==NULL)exit(0);

printf(\课程编号 课程名称 课程性质 总学时 授课学时 实验或上机学时 学分 开课学期\\n\for(p=head;p;p=p->next)

fprintf(fp,\->stime,p->ttime,p->etime,p->score,p->term); fclose(fp);

printf(\创建后的信息已放入'2.txt'文件中\\n\system(\

void savefile1() //保存文件 {

SUB *p; FILE *fp;

fp=fopen(\if(fp==NULL)exit(0); for(p=head;p;p=p->next)

fprintf(fp,\->stime,p->ttime,p->etime,p->score,p->term); fclose(fp);

24

C语言课程设计报告

printf(\创建后的信息已放入'3.txt'文件中\\n\system(\ } 保存文件 系统进行检测所要保存的文件

fprintf(fp,\课程编号 课程名称 课程

性质 总学时 授课学时 实验或上机学 时 学分 开课学期\\n\

p=head;p;p=p->next fprintf(fp,\ dd}\\n\ e,p->kind,p->stime,p->ttime, p->etime,p->score,p->term); fclose(fp);

printf(\创建后的信息已

放入'all_sub.txt'文件中

\\n\ system(\

七、上机操作

25

C语言课程设计报告

开始运行

管理员界面

26

C语言课程设计报告

课程输入模块

管理员浏览模块

27

C语言课程设计报告

管理员课程查询模块

管理员添加模块

28

C语言课程设计报告

管理员删除模块

学生界面

29

C语言课程设计报告

选课模块

学生浏览模块

30

C语言课程设计报告

学生查询模块

学生删除模块

八、结果分析

31

C语言课程设计报告

程序的优缺点

【功能上的优点】主要体现在以下三点:

1.简洁明了的程序菜单。程序主要采用了六组层次不同的菜单,相互独立又相互联系,巧妙相接,符合用户的使用习惯与思维。

2.人性化的程序提示语言,程序提示语言较人性化,不仅大多为祈使语句、疑问句,而且提示明确,具有较强的明确的指导作用。程序提示不仅层次分明,提示方式多样,而且提示信息井然有序,更加有利于用户顺利、准确地进行程序的操作。

3.智能化的模块设计。程序的智能化主要体现在减少了许多人工操作。如功能模块操作结束后,均会返回主菜单进行下一模板的运行,并提示是否再进行类似的操作,这样给用户带来了操作的方便,大大提高了学生选课的效率。

本程序达到了C语言课程设计题目的所有要求。即本程序(1)系统一菜单方式工作(2)课程信息和学生选课信息录入功能(课程信息用文件保存输入(3)课程信息浏览功能——输出(4)查询功能(至少一种查询方式)——算法(5)按学分查询(6)某门课程学生选修情况(可选项)的功能要求。

与此同时,程序各模块开发设计依据了程序的具体实际的使用情景,而有所改进,使其更具有实用性。 【程序的缺点】 主要表现在以下四点:

1.程序虽然经过多次精简,但仅仅是形式上、小范围的精简,仍

未得到本质上的精简,即未找到更加简单、更加高效、更加合理、更小占用的资源的算法。

2.程序仍然存在不合理的地方,例如程序某些部分输入错误会导致程序中止或转向其他功能模块,即程序建议用户注意提示,进行合理的准确的输入,这样更有利于管理工作。

3.程序功能仍然不够完善。例如信息表达方式不丰富,比较单一,缺少图片、音乐等元化表达方式。

32

C语言课程设计报告

附录(源程序代码)

#include \#include \#include \#include\void prin1(); void choose(); typedef struct subjects {

int num; //课程编号 char name[20]; //课程名称 char kind[10]; //课程性质 int stime; //总学时 int ttime; //授课学时 int etime; //实验或上机学时 int score; //学分 int term; //开课学期 struct subjects *next; }SUB;

SUB *head=NULL;

SUB *create_form() //创建链表 {

SUB *head,*tail,*p; int num,stime,ttime; int etime,score,term; char name[20],kind[10]; int size=sizeof(SUB); head=tail=NULL;

printf(\输入选修课程信息:\\n\

33

C语言课程设计报告

scanf(\&term);

while(num!=0) { &term);

}

tail->next=NULL; return head; }

void savefile() //保存文件 {

SUB *p; FILE *fp;

34

p=(SUB *)malloc(size); p->num=num; strcpy(p->name,name); strcpy(p->kind,kind); p->stime=stime; p->ttime=ttime; p->etime=etime; p->score=score; p->term=term; if(head==NULL)

head=p; tail->next=p; else tail=p;

scanf(\

本文来源:https://www.bwwdw.com/article/gie3.html

Top