因为是大一的小白,所以如果有很多不规范的地方还请各位大神能为我指点一下!在这里非常感谢大家的阅读和指导!
一、题目内容的描述
课程设计题目为“学生选修课程系统设计”,假定有n门课程,每门课程有:课程编号,课程名称,课程性质(公共课、必修课、选修课),总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可按要求(如总学分不得少于60)自由选课。
二、应用程序功能的详细说明
学生选修课程系统能提供以下功能:
系统以菜单方式工作
课程信息录入功能,即输入
课程信息浏览功能,即输出
课程信息查询功能,即算法
能通过以下查询方式查询学生选修课程
按学分查询
按课程性质查询
学生选修课程(可选项)
三、数据结构设计,设计输入数据类型、格式和内容限制
系统内包含预处理指令#include<文件名>,int整型变量,char字符及字符串变量,float浮点型变量,以及赋值表达式和struct结构体,其中的结构体包含int整型变量,char字符及字符串变量,float浮点型变量。运用表达式语句,函数调用语句,以及控制语句if else语句、switch语句、break语句,return语句。定义并运用多个函数体作为系统功能运行的基本及提示
int allChoose(); //总菜单
int output(int m, int n); //课程信息输出函数
int input(); //1.课程信息录入
int alloutput(); //2.全部课程显示
int search(); //3.课程信息查询
int change(); //4.课程信息修改
int choose(); //5.选修课程选择
int information(); //6.学生课程信息查看
int back(); //返回总菜单功能
四、模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)
运用函数及函数功能:
int allChoose();总菜单
int output(int m, int n); 课程信息输出函数
int input();课程信息录入
int alloutput();全部课程显示
int search();课程信息查询
int change();课程信息修改
int choose();选修课程选择
int information();学生课程信息查看
int back();返回总菜单功能
系统入口为主函数int main(),无返回值,主函数中调用函数int allChoose()作为系统总菜单,作为运用系统功能的提示。
int allChoose()函数中调用input()函数作为录入函数,调用alloutput()函数作为输入函数,调用search()函数用于查询课程,调用change()函数用于修改课程信息,调用choose()函数用于学生选择课程,并调用int allChoose()函数用于返回总菜单。
int input();函数中调用了int back();函数用于返回总菜单。
int alloutput();函数中调用了int output(int m, int n);函数用于课程信息输出,及int back();函数用于返回总菜单。
int search();函数中调用了int output()函数用于课程信息输出和int back()函数用于返回总菜单。
int change();函数中调用了int output()函数用于课程信息输出和int back()函数用于返回总菜单。
int choose();函数中调用了int output()函数用于课程信息输出和int back()函数用于返回总菜单。
int information();函数中调用了int output()函数用于课程信息输出和int back()函数用于返回总菜单。
int back()函数中调用int allChoose()函数用于输入1后返回主菜单。出口返回值均为0.
五、以上函数的返回主要模块的算法描述
1.以程序流程图的方式给出
2.简要的语言描述
进入系统,按照所需功能输入相应编号,根据系统提示进行下一步操作,若进入课程信息录入,输入课程数量后按照系统提示输入相应内容;进入课程信息浏览功能,则系统显示已输入的课程信息并提示返回总菜单重新选择功能;进入课程信息查询功能,则输入所需查询方式对应的编号,再输入对应信息查询,显示对应课程后提示返回主菜单继续选择所需功能;进入课程信息修改功能,显示所有课程信息,输入所需修改课程的对应编号,然后根据提示输入所需修改的信息对应的编号开始修改,修改后显示修改成功提示返回主菜单进入下一轮功能选择;进入学生选修课程功能,显示所有课程信息,输入想选的课程编号,未选过该课程则显示“课程选择成功”,已选过该课程则显示“课程已选”,显示结果后均提示返回主菜单进行下一步选择;回到主菜单后输入0则退出系统。
六、运行及调试分析(测试数据及测试结果)
进入系统主菜单:
输入1,进入课程录入功能
输入课程信息进行录入:
输入课程信息后返回主菜单:
返回主菜单后输入2,进入浏览功能后并再次返回主菜单:
输入3后进入查询功能:
输入查询方式对应的数字开始查询:
查询后返回主菜单进入修改功能,选择需要修改的课程对应的编号,再选择需要修改的信息:
返回主菜单后进入选课功能,输入课程编号开始选课,选课成功输入选择成功,课程已选则显示课程已选:
再次返回主菜单后输入0退出系统:
七、课程设计总结
C语言课程设计的主要目标是使学生能够熟练掌握C语言的语法,掌握基本的数据结构与算法,以及培养解决实际问题的能力。
在本次课程设计中,我深刻体会到了C语言的强大功能和灵活性。同时,我也认识到了编程中细节的重要性,一个小小的错误可能导致整个程序的崩溃。此外,与团队成员的合作也让我学到了很多沟通与协作的技巧。
虽然我在C语言课程设计中取得了一定的成果,但我知道自己还有许多不足之处。在未来的学习中,我将更加注重实践和独立思考,努力提高自己的编程能力和解决问题的能力。同时,我也希望能够更加深入地学习C语言的底层机制和高级特性,如内存管理、文件操作等。此外,我也意识到持续学习的重要性。随着技术的发展和编程语言的更新换代,我将保持对新技术的关注和学习,以适应不断变化的行业环境。
总的来说,这次的课程设计是一次非常宝贵的学习经历。通过这次课程设计,我不仅掌握了C语言的语法和基本数据结构,更重要的是培养了解决实际问题的能力。我相信,这次学习的经验将对我未来的学习和职业生涯产生积极的影响。
八、参考文献(至少三个)
谭浩强编著《C程序设计(第五版)》
黑马程序员编著《C语言程程设计案例式教程》
郭翠英编著《C语言课程设计案例精编》
九、附录 程序的源代码清单
#include <stdio.h>
#include <string.h>
int allChoose(); //总菜单
int output(int m, int n); //课程信息输出函数
int input(); //1.课程信息录入
int alloutput(); //2.全部课程显示
int search(); //3.课程信息查询
int change(); //4.课程信息修改
int choose(); //5.选修课程选择
int information(); //6.学生课程信息查看
int back(); //返回总菜单功能
struct course//建立结构体
{
int number;
char name[20], nature[16];
int totalTime, time1, time2;
float credit;
char term[10];
int t; //用于标记是否被学生选择
} classList[10]; //最多录入10个课程
int i = 0; //使结构体添加从classList[0]开始
int main()
{
printf("*****************学生选修课程系统*****************\n");
allChoose();
}
int allChoose()//总菜单
{
int n = 0;
printf("请选择端口:\n");
printf("1.课程信息录入\n");
printf("2.课程信息浏览\n");
printf("3.课程信息查询\n");
printf("4.课程信息修改\n");
printf("5.学生选修课程\n");
printf("0.退出\n");
printf("请输入数字(1/2/3/4/5/0):");
scanf("%d", &n);
if (n == 1)
input();
else if (n == 2)
{
if (i == 0)
{
printf("\n请先录入课程!\n\n");
allChoose();
}
else
alloutput();
}
else if (n == 3)
search();
else if (n == 4)
change();
else if (n == 5)
choose();
else if (n == 0) //退出系统
{
printf("退出成功!");
return 0;
}
else
{
printf("输入错误,请重新输入:");
}
return 0;
}
int input()//课程信息录入
{
printf("请输入课程数目\n");
int c;
scanf("%d", &c);
for (i = i; i < c; i++)
{
printf("\n1.课程信息录入\n");
printf("添加新的课程:\n");
printf("输入课程编号:");
scanf("%d", &classList[i].number); //课程编号
printf("输入课程名称:");
scanf("%s", classList[i].name); //课程名称
printf("输入课程性质(选修/必修):");
scanf("%s", classList[i].nature); //课程性质
printf("输入总学时:");
scanf("%d", &classList[i].totalTime); //总学时
printf("输入授课学时:");
scanf("%d", &classList[i].time1); //授课学时
printf("输入实验/上机学时:");
scanf("%d", &classList[i].time2); //实验/上机学时
printf("输入学分:");
scanf("%f", &classList[i].credit); //学分
printf("输入开课学期:");
scanf("%s", classList[i].term); //开课学期
classList[i].t = 0;//默认t为0,即未被学生选择
}
printf("录入成功!\n");
back(); //返回总菜单
return 0;
}
int output(int m, int n)//课程信息输出函数
{
for (m = m; m < n; m++) //循环输出目标课程
{
printf("课程编号:%d 名称:%s 性质:%s 总学时:%d 授课学时:%d 实验/上机学时:%d 学分:%.1f 开课学期:%s \n", classList[m].number, classList[m].name, classList[m].nature, classList[m].totalTime, classList[m].time1, classList[m].time2, classList[m].credit, classList[m].term);
}
return 0;
}
int alloutput()//全部课程显示
{
printf("\n2.全部课程显示\n");
output(0, i); //控制output中for循环次数使全部课程显示
printf("显示成功!\n");
back(); //返回总菜单
return 0;
}
int search()//课程信息查询
{
int m, num, j;
char name[20], nature[16];
printf("\n3.课程信息查询\n");
printf("请输入要查询的方式(1.课程学分/2.课程性质):");
scanf("%d", &m);
if (m == 1) //1.课程学分查询
{
printf("1.根据课程学分查询\n");
printf("请输入课程学分:");
scanf("%d", &num);
for (j = 0; j < i; j++)
{
if (num == classList[j].credit) //将a与已有课程的编号number比较
output(j, j + 1); //控制输出函数只输出classList[j]的信息
}
}
else if (m == 2) //课程性质查询
{
printf("2.根据课程性质查询\n");
printf("请输入课程性质(选修/必修):");
scanf("%s", nature);
for (j = 0; j < i; j++)
{
if (!strcmp(nature, classList[j].nature)) //将a与已有课程的性质nature比较
output(j, j + 1); //控制输出函数只输出classList[j]的信息
}
}
else //当输入的数字不是1/2时重新输入
{
printf("错误输入,请重新输入!\n");
}
back(); //返回总菜单
return 0;
}
//课程信息修改
int change()
{
int j, n;
printf("\n4.课程信息修改\n");
output(0, i); //控制output中for循环次数使全部课程显示,便于选择修改的课程
printf("\n请输入要修改的课程编号:");
scanf("%d", &n);
for (j = 0; j < i; j++)
{
if (n == classList[j].number) //将n与已有课程的编号number比较
{
output(j, j + 1); //控制输出函数只输出class[j]的信息
break;
}
}
printf("\n请输入要修改的信息编号\n");
printf("1.课程编号\n2.课程名称\n3.课程性质\n4.总学时\n5.授课学时\n6.实验/上机学时\n7.学分\n8.开课学期\n");
int b; scanf("%d", &b);
if (b == 1)
{
printf("输入新的课程编号:");
scanf("%d", &classList[j].number); //新的课程编号
}
else if (b == 2) {
printf("输入新的课程名称:");
scanf("%s", classList[j].name);
}//新的课程名称
else if (b == 3) {
printf("输入新的课程性质(选修/必修):");
scanf("%s", classList[j].nature);
} //新的课程性质
else if (b == 4) {
printf("输入新的总学时:");
scanf("%d", &classList[j].totalTime);
}//新的总学时
else if (b == 5) {
printf("输入新的授课学时:");
scanf("%d", &classList[j].time1);
}//新的授课学时
else if (b == 6) {
printf("输入新的实验/上机学时:");
scanf("%d", &classList[j].time2);
} //新的实验/上机学时
else if (b == 7) {
printf("输入新的学分:");
scanf("%f", &classList[j].credit);
} //新的学分
else if (b == 8) {
printf("输入新的开课学期:");
scanf("%s", classList[j].term);
}//新的开课学期
classList[j].t = 0; //t依然为0,即未被学生选择
printf("修改成功!\n");
back(); //返回总菜单
return 0;
}
//选修课程选择
int choose()
{
int j, n = 0, a;
printf("\n2.选修课程显示\n");
output(0, i); //控制output中for循环次数使全部课程显示
printf("请输入要选择的课程编号:");
scanf("%d", &n);
for (j = 0; j < i; j++)
{
if (n == classList[j].number)
{
if (classList[j].t == 1) //如果t=1说明该课程已经选择
printf("课程已选");
else
{
classList[j].t = 1; //用t=1等于表示学生已选
printf("课程%d选择成功\n", n);
break;
}
}
}
back(); //返回总菜单
return 0;
}
//学生课程信息查看
int information()
{
int j;
printf("\n4.学生课程信息\n");
printf("-->已选课程<--\n");
for (j = 0; j < i; j++)
{
if (classList[j].t == 1) //判断结构体中t是否为1
output(j, j + 1); //控制输出函数只输出class[j]的信息
}
printf("显示成功!\n");
back(); //返回总菜单
return 0;
}
//返回总菜单
int back()
{
int a = 0;
printf("\n");
printf("返回总菜单(请输入1):");
scanf("%d", &a);
if (a == 1)
allChoose(); //返回总菜单
else
{
printf("错误输入,请重新输入:");
}
return 0;
}