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

上传人:b****6 文档编号:7791619 上传时间:2023-01-26 格式:DOCX 页数:15 大小:63.71KB
下载 相关 举报
C语言程序设计报告学生选修课系统.docx_第1页
第1页 / 共15页
C语言程序设计报告学生选修课系统.docx_第2页
第2页 / 共15页
C语言程序设计报告学生选修课系统.docx_第3页
第3页 / 共15页
C语言程序设计报告学生选修课系统.docx_第4页
第4页 / 共15页
C语言程序设计报告学生选修课系统.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

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

《C语言程序设计报告学生选修课系统.docx》由会员分享,可在线阅读,更多相关《C语言程序设计报告学生选修课系统.docx(15页珍藏版)》请在冰豆网上搜索。

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

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

 

C

学校:

学院:

班级序号:

学号:

姓名:

指导老师:

 

C语言程序设计报告

一、C语言课程设计的目的:

 高级语言课程设计是学习完《高级语言程序设计》课程后进行的一次全面的综合性上机实验。

其目的在于为同学提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼同学的分析解决实际问题的能力。

提高学生适应实际,实践编程的能力。

二、题目

学生选修课程系统设计

假定有n门课程,每门课程有课程编号、课程名称、课程性质、总学时、授课学时、实验或商机学时、血粉、开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。

1、要求:

试设计一个选修课程系统,使之能提供以下功能:

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

(2)课程信息和学生选课信息输入功能(课程信息用文件保存)——输入。

(3)课程信息浏览功能——输出。

(4)查询功能(至少一种查询方式)——算法。

(5)按学分查询。

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

2、分析:

由于题目要求将学生的选课信息用结构体形式输入,并写入文件中,所以应提供文件的输入输出等操作:

在过程中需有浏览、插入、修改、查找、删除学生选课信息等操作,顾应分别建立个功能模块;另外还应提供键盘式选择菜单实现程序运行。

3、总体设计:

根据题目要求,可以将系统分为六个模块:

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

2)课程信息与学生选课信息录入功能模块;

3)课程信息浏览功能模块;

4)查询模块;

5)按学分查询模块;

6)某些课程学生选修情况模块。

4详细设计:

#include

#include主流程图:

#include

typedefstructsubjects

{

intnum;

charname[20];

charkind[10];

intstime;

intttime;

intetime;

intscore;

intterm;

structsubjects*next;

}SUB;

SUB*create_form()

{

SUB*head,*tail,*p;

intnum,stime,ttime;

intetime,score,term;

charname[20],kind[10];

intsize=sizeof(SUB);

head=tail=NULL;

 

printf("输入选修课程信息:

\n");

scanf("%d%s%s%d%d%d%d%d",&num,&name,&kind,&stime,&ttime,&etime,&score,&term);

while(num!

=0){

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;

else

tail->next=p;

tail=p;

scanf("%d%s%s%d%d%d%d%d",&num,&name,&kind,&stime,&ttime,&etime,&score,&term);

}

tail->next=NULL;

returnhead;

}

voidsavefile(SUB*head)

{

SUB*p;

FILE*fp;

fp=fopen("subjects.txt","w");

 

 

fprintf(fp,"课程编号课程名称课程性质总学时授课学时实验或上机学时学分开课学期\n");

for(p=head;p;p=p->next)

fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);

fclose(fp);

}

voidsavefileadd(SUB*head)

{

SUB*p;

FILE*fp;

fp=fopen("subjectsadd.txt","w");

fprintf(fp,"课程编号课程名称课程性质总学时授课学时实验或上机学时学分开课学期\n");

for(p=head;p;p=p->next)

fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);

fclose(fp);

}

voidsavefiledel(SUB*head)

{

SUB*p;

FILE*fp;

fp=fopen("subjectsdel.txt","w");

fprintf(fp,"课程编号课程名称课程性质总学时授课学时实验或上机学时学分开课学期\n");

for(p=head;p;p=p->next)

fprintf(fp,"%5d%12s%9s%9d%9d%11d%11d%7d\n",p->num,p->name,p->kind,p->stime,p->ttime,p->etime,p->score,p->term);

fclose(fp);

}

 

voidprin(SUB*head)

{

SUB*ptr;

if(head==NULL){

printf("没有此门课程记录!

\n");

return;

}

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

for(ptr=head;ptr;ptr=ptr->next)

printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);

}

voidsearch(SUB*head)

{

inta,num;

intt=1;

chartype[10];

charch='a',ch1;

SUB*ptr;

 

while(ch!

=''){

printf("若要按课程性质查找请输入1,若要按学分查找请输入2:

\n");

scanf("%d",&a);

switch(a){

case1:

printf("请输入要查找的课程的性质:

\n");

scanf("%s",type);

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

for(ptr=head;ptr;ptr=ptr->next)

if(strcmp(type,ptr->kind)==0){

 

printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);

t=0;

}

if(t)printf("未找到!

\n");

t=1;

break;

case2:

printf("输入要查找的课程的学分\n");

scanf("%d",&num);

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

for(ptr=head;ptr;ptr=ptr->next)

if(ptr->score==num){

printf("%5d%12s%9s%9d%9d%11d%11d%7d\n",ptr->num,ptr->name,ptr->kind,ptr->stime,ptr->ttime,ptr->etime,ptr->score,ptr->term);

t=0;

}

if(t)printf("未找到!

\n");

t=1;

}

printf("继续查找请按回车键,结束请按空格键:

\n");

ch1=getchar();//将回车键赋给CH1,否则CASE里面最后输入的回车键会赋给CH,因此用CH1填补。

ch=getchar();

}

}

SUB*insert(SUB*head)

{

SUB*ptr,*ptr2,*subj;

intsize=sizeof(SUB);

charch='a',ch1;

while(ch!

=''){

subj=(SUB*)malloc(size);

ptr=subj;

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

\n");

scanf("%d%s%s%d%d%d%d%d",&subj->num,subj->name,subj->kind,&subj->stime,&subj->ttime,&subj->etime,&subj->score,&subj->term);

 

if(head==NULL){

head=ptr;

head->next=NULL;

}

else{

for(ptr2=head;ptr2;ptr2=ptr2->next)

if(ptr2->next==NULL){

ptr2->next=subj;

subj->next=NULL;

break;

}

}

printf("继续插入请按回车,结束请按空格:

\n");

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

ch=getchar();

}

returnhead;

}

SUB*del(SUB*head)

{

SUB*p1,*p2;

charch='a',ch1;

intnum;

while(ch!

=''){

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

\n");

scanf("%d",&num);

if(head->num==num){

p2=head;

head=head->next;

free(p2);

}

if(head==NULL)

returnNULL;

p1=head;

p2=head->next;

 

while(p2){

if(p2->num==num){

p1->next=p2->next;

free(p2);

}

elsep1=p2;

p2=p1->next;

}

printf("继续删除请按回车,结束请按空格:

\n");

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

ch=getchar();

}

returnhead;

}

voidchoose(SUB*head)

 

{

SUB*p,*q;

inta[5];

intnum,total=0,i=0,j;

printf("输入要选修的课程的编号,编号之间以空格分开,输完后以0结束\n");

scanf("%d",&num);

while(num!

=0){

for(p=head;p;p=p->next)

if(p->num==num){

total=total+p->score;

a[i]=num;

i++;

}

scanf("%d",&num);

}

if(total<60)printf("选修总学分未达到60,选修失败!

\n");

 

else{

printf("选修成功!

\n");

printf("您选修的课程为:

\n");

for(j=0;j

for(q=head;q;q=q->next)

if(q->num==a[j])

 

printf("%s",q->name);

printf("\n");

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

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

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

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

}

}

voidmain()

{

SUB*head=create_form();

savefile(head);

prin(head);

search(head);

head=insert(head);//注意此处的必要性函数insert的的返回值重新赋给head!

savefileadd(head);

printf("修改后的信息为:

\n");

prin(head);

head=del(head);//注意此处的必要性,数del的的返回值重新赋给head!

savefiledel(head);

printf("修改后的课程信息为:

\n");

prin(head);

choose(head);

}

 

运行结果:

输入选修课程信息:

1mathsbx15140251

2Entgbx15140251

3hhxx1082151

4bbxx25140351

0ggxx12100101

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

1mathsbx15140251

2Entgbx15140251

3hhxx1082151

4bbxx25140351

若要按课程性质查找请输入1,若要按学分查找请输入2:

1

请输入要查找的课程的性质:

bx

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

1mathsbx15140251

2Entgbx15140251

继续查找请按回车键,结束请按空格键:

若要按课程性质查找请输入1,若要按学分查找请输入2:

2

输入要查找的课程的学分

15

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

3hhxx1082151

继续查找请按回车键,结束请按空格键:

 

课程设计体会:

通过学习和练习C程序的设计基础,学习到了很多关于C的知识。

在这次学习过程中,毫无疑问的遇到了很多困惑、疑问,难免心情沮丧,失去耐心,信心受挫,但同学的帮助,老师的解惑和自己的坚持。

终于做了出来。

看着这一页页的程序,我感受到了成功的喜悦。

用一句话来形容一下这几天就是:

苦并快乐着。

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

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1