内蒙古科技大学
本科生课程设计说明书
题 目:C语言课程设计
——学生选修课程系统
学生姓名:包鑫
学 号:1376807325
专 业:计算机
班 级:3班
指导教师:孙涛
课程名称 | C语言课程设计 | ||
设计题目 | 学生选修课程管理系统 | ||
指导教师 | 孙涛 | 时间 | 2012.12.31——2013.1.4 |
一、教学要求 1. 巩固和加深学生对C语言课程的基本知识的理解和掌握 二、设计资料及参数 每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 学生选修课程管理系统设计 假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能: 课程信息录入功能(课程信息用文件保存)--输入;课程信息浏览功能--输出 查询功能:(至少一种查询方式)--算法 ●按学分查询 ●按课程名称查询 学生选修课程(可选项) 三、设计要求及成果 1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目) 四、进度安排 第一天 选择课程设计题目,分析课题的要求 五、评分标准 1. 根据平时上机考勤、表现和进度,教师将每天点名和检查 2. 根据课程设计完成情况,必须有可运行的软件。 六、建议参考资料 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
假定有n门课程,每门课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。试设计一选修课程系统,使之能提供以下功能:
课程信息录入功能(课程信息用文件保存)--输入;课程信息浏览功能输出
查询功能:(至少一种查询方式)--算法
按学分查询 按课程名称查询
学生选修课程(可选项)
/*
以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?并明确规定:
(1) 输入的形式和输入值的范围;
(2) 输出的形式;
(3) 程序所能达到的功能;
(4) 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。
注:以上小节或内容可根据自己实际情况进行增删
注:最终打印前要删掉或修改所有红色字体的内容
*/
可参考用以下表格形式:
表2.1:函数列表
函数名 | 函数格式 //即函数首部 | 函数功能 |
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("请选择1或2\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 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;
}
/*排序模块*/
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 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");
}
}
/*
本章主要内容为说明本程序中用到的函数的详细设计过程,包括对代码的说明、变量和参数的命名及在程序中的作用、所采用的算法并准确的画出程序流程图。
注:以上小节或内容可根据自己实际情况进行增删
注:最终打印前要删掉或修改所有红色字体的内容
*/
/*
本章主要内容为说明在详细设计阶段完成后对代码所实现的功能进行数据测试的过程;
包括使用了那些数据进行测试,尤其是带有苛刻性质的数据进行测试;
可以对测试结果进行抓图;
说明程序中出现了那些问题,以及是如何解决的;
或者课程设计中还存在哪些问题,以及解决此类问题的设想。
注:以上小节或内容可根据自己实际情况进行增删
注:最终打印前要删掉或修改所有红色字体的内容
*/
/*
本章主要内容为说明用户在使用该软件时应注意的使用方式、输入数据的格式、可以实现的功能,使用时的注意事项等;
可以附带运行结果截图进行说明,但插图要有编号和命名,并要符合课程设计要求。
注:以上小节或内容可根据自己实际情况进行增删
注:最终打印前要删掉或修改所有红色字体的内容
*/
/*
总结设计及编程中的亮点,分析可能存在的不足之处及可以进一步改善的方法,本次项目任务中值得吸取的经验教训等。
注:最终打印前要删掉或修改所有红色字体的内容
*/
#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("请选择1或2\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格式