学生选课系统任务书

发布时间:2014-12-25 17:05:20   来源:文档文库   
字号:

内蒙古科技大学

本科生课程设计说明书

目:C语言课程设计

——学生选修课程系统

学生姓名:包鑫

号:1376807325

业:计算机

级:3

指导教师:孙涛



内蒙古科技大学课程设计任务书

课程名称

C语言课程设计

设计题目

学生选修课程管理系统

指导教师

孙涛

时间

2012.12.31——2013.1.4

一、教学要求

1. 巩固和加深学生对C语言课程的基本知识的理解和掌握

2. 掌握C语言编程和程序调试的基本技能

3. 利用C语言进行基本的软件设计

4. 掌握书写程序设计说明文档的能力

5. 提高运用C语言解决实际问题的能力

二、设计资料及参数

每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。

学生选修课程管理系统设计

假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能:

课程信息录入功能(课程信息用文件保存)--输入;课程信息浏览功能--输出

查询功能:(至少一种查询方式)--算法

●按学分查询 ●按课程名称查询

学生选修课程(可选项)

三、设计要求及成果

1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)

2. 写出详细设计说明(至少包括功能实现分析和模块流程图)

3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少3个函数,每人至少200行代码,不包括注释和花括号)

4. 设计完成的软件要便于操作和使用

5. 设计完成后提交课程设计报告(请严格按照模板进行排版)

四、进度安排

第一天  选择课程设计题目,分析课题的要求

第二天  编程

第三天  编程及调试

第四天  写课程设计报告

第五天  提交课程设计报告(打印稿及电子稿)

五、评分标准

1. 根据平时上机考勤、表现和进度,教师将每天点名和检查

2. 根据课程设计完成情况,必须有可运行的软件。

3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。

六、建议参考资料

1.《C语言程序设计》,谭浩强,清华大学出版社

2.《C语言程序设计课程设计》,刘振安,机械工业出版社



内蒙古科技大学课程设计任务书 I

第一章 需求分析 3

1.1 引言 3

1.2 任务概述 3

1.3 数据描述 3

1.4 功能需求 3

1.5 性能需求 3

1.6 运行需求 4

1.7 任务计划 4

第二章 概要设计 5

2.1 总体设计 5

2.2 数据类型设计(或数据结构设计) 5

2.3 接口设计 //函数声明 5

2.4 运行界面设计 5

第三章 详细设计 7

3.1 输入模块设计 7

3.2 输出模块设计 7

3.3 查找模块设计 7

3.4 排序模块设计 7

3.5 保存及读取模块设计 7

第四章 测试分析 8

4.1 测试程序执行情况 8

4.2 出现的问题和解决的方法 8

第五章 用户手册(可选) 9

5.1 使用说明 9

5.2 运行说明 9

第六章 课程设计总结 10

附录:程序代码 11

参考文献 12

致谢 13



第一章 需求分析

1.1 引言

1.2 任务概述

假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能:

课程信息录入功能(课程信息用文件保存)--输入;课程信息浏览功能输出

查询功能:(至少一种查询方式)--算法

按学分查询 按课程名称查询

学生选修课程(可选项)

1.3 数据描述

1.4 功能需求

1.5 性能需求

1.6 运行需求

1.7 任务计划

/*

以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?并明确规定:

  (1) 输入的形式和输入值的范围;

  (2) 输出的形式;

  (3) 程序所能达到的功能;

  (4) 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

注:以上小节或内容可根据自己实际情况进行增删

注:最终打印前要删掉或修改所有红色字体的内容

*/

第二章 概要设计

2.1 总体设计

2.2 数据类型设计(或数据结构设计)

2.3 接口设计 //函数声明

可参考用以下表格形式:

2.1:函数列表

函数名

函数格式 //即函数首部

函数功能

2.4 运行界面设计

char message[]={"*************************"

"*************************\n"

"****"

"******欢迎使用内蒙古科技大学选课系统**********\n"

"本系统是一个学生选课系统,您可以在本系统中实现\n"

"课程信息的输入,浏览,查找,存入,删除,修改,\n"

"排序,保存等操作**********************************\n"};

char menu[]={"**************************************************\n"

"**************************************************\n"

" *1.输入课程信息 \n"

" *2.浏览课程信息 \n"

" *3.查找课程信息 \n"

" *4.插入课程信息 \n"

" *5.删除课程信息 \n"

" *6.修改课程信息 \n"

" *7.课程信息排序 \n"

" *8.存盘 \n"

" *9.退出 \n"

"**************************************************\n"};



第三章 详细设计

3.1 输入模块设计

printf("%s",message);

do

{

printf("%s",menu);

printf("请在1--9中选择\n");

scanf("%d",&sel);

switch(sel)

{

case 1:

printf("1---键盘输入\n");

printf("2---文件载入\n");

printf("请选择12\n");

scanf("%d",&choice);

switch(choice)

{

case 1:

n=input(s);

break;

case 2:

n=openfile(s);

break;

}

break;

case 2:

output(s,n);

break;

case 3:

do

{

printf("1----------按照学分查找------\n");

printf("2----------按照课程名查找----\n");

printf("0----------返回上一级菜单----\n");

printf("请选择\n");

scanf("%d",&choice);

switch(choice)

{

case 1:

printf("请输入学分\n");

scanf("%d",&search_score);

i=seqsearch1(s,n,search_score);

if(i==-1)

printf("无此学分相应课程");

else

{

printf("***********");

printf("i=%d",i);

printf("查找课程为:\n");

printf("课程编号%d\n",s[i].num);

printf("课程名称%20s\n",s[i].name);

printf("课程性质%20s\n",s[i].kind);

printf("总学时%d\n",s[i].lhours);

printf("授课学时%d\n",s[i].rhours);

printf("实验或上机学时%d\n",s[i].crdit);

printf("学分%d\n",s[i].score);

printf("开课学期%d\n",s[i].term);

printf("--------\n");

}

break;

case 2:

printf("请输入课程名\n");

scanf("%s",search_name);

i=seqsearch2(s,n,search_name);

if(i==-1)

printf("无此课程\n");

else

{

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

printf("查找的课程为");

printf("课程编号%d\n",s[i].num);

printf("课程名称%20s\n",s[i].name);

printf("课程性质%20s\n",s[i].kind);

printf("总学时%d\n",s[i].lhours);

printf("授课学时%d\n",s[i].rhours);

printf("实验或上机学时%d\n",s[i].crdit);

printf("学分%d\n",s[i].score);

printf("开课学期%d\n",s[i].term);

}

break;

case 9:

break;

}

}while(choice!=0);

case 4:

seqinsert(s,len);

break;

case 5:

seqdelete(s,len);

break;

case 6:

revise(s,n);

break;

case 7:

sort(s,n);

break;

case 8:

save(s,n);

break;

case 9:exit(1);

}

}while(sel!=0);

}

3.2 输出模块设计

/*输出模块*/

void output( struct stu s[],int n)

{

int i;

printf(" 选修课程信息表 \n ");

printf("\n ");

for(i=0;i<=n-1;i++)

{printf("课程编号%d\n",s[i].num);

printf("课程名称%20s\n",s[i].name);

printf("课程性质%20s\n",s[i].kind);

printf("总学时%d\n",s[i].lhours);

printf("授课学时%d\n",s[i].rhours);

printf("实验或上机学时%d\n",s[i].crdit);

printf("学分%d\n",s[i].score);

printf("开课学期%d\n",s[i].term);

}

}

3.3 查找模块设计

int seqsearch1( struct stu s[],int n,int search_score)

{

int i=0;

for(i=0;i<=n-1;i++)

if(s[i].score==search_score)

return i;

}

3.4 排序模块设计

/*排序模块*/

void sort( struct stu s[],int n)

{

int i,j,k;

for(i=0;i

{

k=i;

for(j=i+1;j

if(strcmp(s[k].name,s[j].name)>0)

k=j;

if(i!=k)

{

t=s[k];

s[k]=s[i];

s[i]=t;

}

}

}

3.5 保存及读取模块设计

/*保存模块*/

void save(struct stu s[],int n)

{

int i;

FILE *fp1;

fp1=fopen("d:\\课程系统表.txt","w");

if(fp1==NULL)

printf("保存不成功\n");

else

{

for(i=0;i

fprintf(fp1,"%d%20s%10d%d%d%d%d",s[i].num,s[i].name,s[i].kind,s[i].lhours,s [i].rhours,s[i].crdit,s[i].score,s[i].term);

fclose(fp1);

printf("成功保存\n");

}

}

/*

本章主要内容为说明本程序中用到的函数的详细设计过程,包括对代码的说明、变量和参数的命名及在程序中的作用、所采用的算法并准确的画出程序流程图。

注:以上小节或内容可根据自己实际情况进行增删

注:最终打印前要删掉或修改所有红色字体的内容

*/



第四章 测试分析

4.1 测试程序执行情况

4.2 出现的问题和解决的方法

/*

本章主要内容为说明在详细设计阶段完成后对代码所实现的功能进行数据测试的过程;

包括使用了那些数据进行测试,尤其是带有苛刻性质的数据进行测试;

可以对测试结果进行抓图;

说明程序中出现了那些问题,以及是如何解决的;

或者课程设计中还存在哪些问题,以及解决此类问题的设想。

注:以上小节或内容可根据自己实际情况进行增删

注:最终打印前要删掉或修改所有红色字体的内容

*/



第五章 用户手册(可选)

5.1 使用说明

5.2 运行说明

/*

本章主要内容为说明用户在使用该软件时应注意的使用方式、输入数据的格式、可以实现的功能,使用时的注意事项等;

可以附带运行结果截图进行说明,但插图要有编号和命名,并要符合课程设计要求。

注:以上小节或内容可根据自己实际情况进行增删

注:最终打印前要删掉或修改所有红色字体的内容

*/



第六章 课程设计总结

/*

总结设计及编程中的亮点,分析可能存在的不足之处及可以进一步改善的方法,本次项目任务中值得吸取的经验教训等。

注:最终打印前要删掉或修改所有红色字体的内容

*/



附录:程序代码

#include

#include

#include

struct stu

{

int num;

char name[20];

char kind[20];

int lhours;

int rhours;

int crdit;

int score;

int term;

}s[1000],t;

int input(struct stu s[]);

int openfile(struct stu s[]);

void output(struct stu s[],int n);

int seqsearch1(struct stu s[],int n,int search_score);

int seqsearch2(struct stu s[],int n,char search_name[]);

void seqinsert(struct stu s[],int *len);

void seqdelete(struct stu s[],int *len);

void revise(struct stu s[],int n);

void sort(struct stu s[],int n);

void save(struct stu s[],int n);

int main()

{

int sel,choice;

int n,*len=&n,i;

int search_score;

char search_name[20];

char message[]={"*************************"

"*************************\n"

"****"

"******欢迎使用内蒙古科技大学选课系统**********\n"

"本系统是一个学生选课系统,您可以在本系统中实现\n"

"课程信息的输入,浏览,查找,存入,删除,修改,\n"

"排序,保存等操作**********************************\n"};

char menu[]={"**************************************************\n"

"**************************************************\n"

" *1.输入课程信息 \n"

" *2.浏览课程信息 \n"

" *3.查找课程信息 \n"

" *4.插入课程信息 \n"

" *5.删除课程信息 \n"

" *6.修改课程信息 \n"

" *7.课程信息排序 \n"

" *8.存盘 \n"

" *9.退出 \n"

"**************************************************\n"};

printf("%s",message);

do

{

printf("%s",menu);

printf("请在1--9中选择\n");

scanf("%d",&sel);

switch(sel)

{

case 1:

printf("1---键盘输入\n");

printf("2---文件载入\n");

printf("请选择12\n");

scanf("%d",&choice);

switch(choice)

{

case 1:

n=input(s);

break;

case 2:

n=openfile(s);

break;

}

break;

case 2:

output(s,n);

break;

case 3:

do

{

printf("1----------按照学分查找------\n");

printf("2----------按照课程名查找----\n");

printf("0----------返回上一级菜单----\n");

printf("请选择\n");

scanf("%d",&choice);

switch(choice)

{

case 1:

printf("请输入学分\n");

scanf("%d",&search_score);

i=seqsearch1(s,n,search_score);

if(i==-1)

printf("无此学分相应课程");

else

{

printf("***********");

printf("i=%d",i);

printf("查找课程为:\n");

printf("课程编号%d\n",s[i].num);

printf("课程名称%20s\n",s[i].name);

printf("课程性质%20s\n",s[i].kind);

printf("总学时%d\n",s[i].lhours);

printf("授课学时%d\n",s[i].rhours);

printf("实验或上机学时%d\n",s[i].crdit);

printf("学分%d\n",s[i].score);

printf("开课学期%d\n",s[i].term);

printf("--------\n");

}

break;

case 2:

printf("请输入课程名\n");

scanf("%s",search_name);

i=seqsearch2(s,n,search_name);

if(i==-1)

printf("无此课程\n");

else

{

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

printf("查找的课程为");

printf("课程编号%d\n",s[i].num);

printf("课程名称%20s\n",s[i].name);

printf("课程性质%20s\n",s[i].kind);

printf("总学时%d\n",s[i].lhours);

printf("授课学时%d\n",s[i].rhours);

printf("实验或上机学时%d\n",s[i].crdit);

printf("学分%d\n",s[i].score);

printf("开课学期%d\n",s[i].term);

}

break;

case 9:

break;

}

}while(choice!=0);

case 4:

seqinsert(s,len);

break;

case 5:

seqdelete(s,len);

break;

case 6:

revise(s,n);

break;

case 7:

sort(s,n);

break;

case 8:

save(s,n);

break;

case 9:exit(1);

}

}while(sel!=0);

}

void save(struct stu s[],int n)/*保存模块*/

{

int i;

FILE *fp1;

fp1=fopen("d:\\课程系统表.txt","w");

if(fp1==NULL)

printf("保存不成功\n");

else

{

for(i=0;i

fprintf(fp1,"%d%20s%10d%d%d%d%d",s[i].num,s[i].name,s[i].kind,s[i].lhours,s[i].rhours,s[i].crdit,s[i].score,s[i].term);

fclose(fp1);

printf("成功保存\n");

}

}

/*输出模块*/

void output( struct stu s[],int n)

{

int i;

printf(" 选修课程信息表 \n ");

printf("\n ");

for(i=0;i<=n-1;i++)

{printf("课程编号%d\n",s[i].num);

printf("课程名称%20s\n",s[i].name);

printf("课程性质%20s\n",s[i].kind);

printf("总学时%d\n",s[i].lhours);

printf("授课学时%d\n",s[i].rhours);

printf("实验或上机学时%d\n",s[i].crdit);

printf("学分%d\n",s[i].score);

printf("开课学期%d\n",s[i].term);

}

}

/*学分查询模块*/

int seqsearch1( struct stu s[],int n,int search_score)

{

int i=0;

for(i=0;i<=n-1;i++)

if(s[i].score==search_score)

return i;

}

/*课程名查询模块*/

int seqsearch2( struct stu s[],int n,char search_name[])

{

int i=0;

for(i=0;i<=n-1;i++)

if(strcmp(s[i].name,search_name)==0)

return i;

}

/*修改模块*/

void revise( struct stu s[],int n)

{

int k,choice;

char kname[20];

do

{

printf("1**********按课程名称修改*******\n");

printf("0***********返回上级菜单 ***********\n");

printf("请输入选择\n");

scanf("%d",&choice);

switch(choice)

{

case 1:

printf("请输入要修改的课程名称\n");

scanf("%s",&kname);

k=seqsearch2(s,n,kname);

if(k==-1)

printf("修改无效\n");

else{

printf("课程编号");

scanf("%d",&s[k].num);

printf("课程名称");

scanf("%20s",&s[k].name);

printf("课程性质");

scanf("%20s",&s[k].kind);

printf("总学时");

scanf("%d",&s[k].lhours);

printf("授课学时");

scanf("%d",&s[k].rhours);

printf("实验或上机学时");

scanf("%d",&s[k].crdit);

printf("学分");

scanf("%d",&s[k].score);

printf("开课学期");

scanf("%d",&s[k].term);

printf("修改成功!\n");

}

break;

case 0:

break;

}

}while(choice!=0);

}

/*删除模块*/

void seqdelete( struct stu s[],int *len)

{

int j,delete_score,k,choice;

char delete_name[20];

if(*len==0)

printf("数组以空");

else

{

do

{

printf("1*********按课程名删除*****\n");

printf("0*********返回上级菜单*****\n");

printf("请输入选择\n");

scanf("%d",&choice);

switch(choice)

{

case 1: printf("请输入删除课程的课程名:");

scanf("%s",delete_name);

k=seqsearch2(s,*len,delete_name);

if(k==-1)

printf("无效的删除位置\n");

else

{

for(j=k+1;j<=*len-1;j++)

s[j-1]=s[j];

(*len)--;

printf("删除成功");

}

break;

case 0:

break;

}

}while(choice!=0);

}

}

/*输入模块*/

int input( struct stu s[])

{

int i=0,n=0;

printf("输入课程编号(-1时结束)");

scanf("%d",&s[i].num);

while(s[i].num!=-1)

{

printf("课程编号");

scanf("%d",&s[i].num);

printf("课程名称");

scanf("%20s",&s[i].name);

printf("课程性质");

scanf("%20s",&s[i].kind);

printf("总学时");

scanf("%d",&s[i].lhours);

printf("授课学时");

scanf("%d",&s[i].rhours);

printf("实验或上机学时");

scanf("%d",&s[i].crdit);

printf("学分");

scanf("%d",&s[i].score);

printf("开课学期");

scanf("%d",&s[i].term);

i++;

n++;

printf("输入课程编号(-1时结束)");

scanf("%d",&s[i].num);

}

return n;

}

/*排序模块*/

void sort( struct stu s[],int n)

{

int i,j,k;

for(i=0;i

{

k=i;

for(j=i+1;j

if(strcmp(s[k].name,s[j].name)>0)

k=j;

if(i!=k)

{

t=s[k];

s[k]=s[i];

s[i]=t;

}

}

}

/*插入模块*/

void seqinsert( struct stu s[],int *len)

{

int j,k,choice;

int insert_num;

char insert_name[10];

char insert_kind[20];

int insert_ltime;

int insert_stime;

int insert_sjtime;

int insert_score;

int insert_term;

struct stu cr ; /*新数组*/

if(*len==1000-1)

printf("数组已满!");

else

{

do{

printf("1**********按课程名称插入*******\n");

printf("0***********返回上级菜单 ***********\n");

printf("请输入选择\n");

scanf("%d",&choice);

switch(choice)

{

case 1:

printf("请输入插入位置(插入某课程名之前)\n");

scanf("%s",&insert_name);

k=seqsearch2(s,*len,insert_name);

if(k==-1)

printf("位置无效、\n");

else{ printf("课程编号");

scanf("%d",&cr.num);

printf("课程名称");

scanf("%20s",&cr.name);

printf("课程性质");

scanf("%20s",&cr.kind);

printf("总学时");

scanf("%d",&cr.lhours);

printf("授课学时");

scanf("%d",&cr.rhours);

printf("实验或上机学时");

scanf("%d",&cr.crdit);

printf("学分");

scanf("%d",&cr.score);

printf("开课学期");

scanf("%d",&cr.term);

for(j=*len-1;j>=k;j--)

s[j+1]=s[j];

s[k]=cr;

(*len)++;

printf("插入成功\n");

}

break;

case 0:

break;

}

}while(choice!=0);

}

}

/*载入模块*/

int openfile(struct stu s[] )

{

int i=0;

FILE *fp2;

fp2=fopen("d:\\课程系统表.txt","r"); /*打开D"课程系统表"文件*/

if(fp2==NULL)

{

printf("找不到文件\n");

return 0;

}

else

{

while(!feof(fp2))

{

fscanf(fp2,"%d%s%s%d%d%d%d%d");

i++;

}

fclose(fp2);

printf("数据写入\n");

return i;

}

}



参考文献

[1].张跃廷,王小科,帖凌珍. ASP.NET程序开发范例宝典[M],北京:人民邮电出版社,2007

[2].马颖华,苏贵洋,袁艺等. ASP.NET 2.0网络编程从基础到实践[M],北京:电子工业出版社,2007

本文来源:https://www.2haoxitong.net/k/doc/e885719af61fb7360b4c65b4.html

《学生选课系统任务书.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式