程序设计基础(C语言)
课程设计报告
题 目: 学生成绩管理系统设计
学 院: 经济管理学院
班 级: 数据一班
学 号: 19760116
姓 名: 章舒婕
教 师: 吴莹
完成日期: 2020.2.14
2020年1 月 1 日
目 录
第1章 课程设计的目的和要求... 1
1.1 课程设计目的... 1
1.2 课程设计要求... 1
第2章 课程设计任务... 3
2.1 设计任务... 3
2.2 主界面参考... 3
2.3 其他说明... 4
第3章 课程设计内容... 5
3.1 系统功能设计(画图并说明) 5
3.2 系统流程图... 5
3.3 函数功能及函数原型说明... 5
3.4 调试分析... 5
3.5 心得与体会... 5
第4章 软件使用说明... 6
附录 各功能模块的实现及其程序清单... 7
第1章 课程设计的目的和要求
1.1 课程设计目的
本课程设计是数据科学与大数据技术专业的实践性环节之一,是学习完《程序设计基础(C语言)》课程后进行的综合练习。本课程设计的目的和任务:
1.巩固和加深学生对C语言课程的基本知识的理解和掌握;
2.掌握C语言编程和程序调试的基本技能;
3.利用C语言进行基本的软件设计;
4.掌握书写程序设计说明文档的能力
5.提高运用C语言解决实际问题的能力。
通过课程设计,培养独立思考、对知识的综合运用能力,巩固《程序设计基础(C语言)》课程内容,体验软件设计的基本方法,强化上机动手编程能力。通过课程设计了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力,为后续各门课程的学习打下坚实基础。
1.2 课程设计要求
此次课程设计的目的是以C程序设计语言为基础,通过对问题的功能描述、总体设计、程序编写及调试工作,独立完成一个小型应用程序的设计、编码和测试,加深对C语言相关知识的理解与Visual Studio 集成开发环境的使用。
基本要求:
1、突出C语言的函数特征,以函数实现每一个子功能;
2、分析程序的功能要求,划分程序功能模块,画出功能模块图;
3、进行简单界面设计,能够实现友好的交互;
4、定义数据类型和各个功能子函数;
5、画出清晰的程序流程图和数据结构类型的详细定义;
6、代码的编写;
7、程序的功能调试;
8、完成系统总结报告,附录与软件使用说明书(本文档)。
系统总结报告:问题描述,系统设计与实现,讨论思考。
其中系统设计与实现说明包括:系统功能设计(画图说明),详细设计(主要数据和函数功能描述,以及函数的调用关系)。
9、最后提交(电子版):本文档、最终版本的工程文件压缩包(VS2019调试通过)。
第2章 课程设计任务
2.1 设计任务
要求编写一个简单的系统,管理学生成绩信息(信息内容包含学号、姓名、高数、英语、程序设计),可进行录入、查询、删除、排序、修改、统计、退出等功能。为简化讨论,要求设计的管理系统能够完成以下功能:
(1) 每一条记录包括一个学生的学号、姓名、3门课成绩。
例:现有学生成绩信息,包含
学号 |
姓名 |
高数 |
英语 |
程序设计 |
0101 |
童 |
77 |
88 |
86 |
0102 |
王 |
78 |
89 |
85 |
0103 |
周 |
79 |
87 |
84 |
(2) 成绩信息录入功能(可以逐条录入,也可以用文件保存成绩信息,一次完成若干条记录的输入)。
(3) 成绩浏览功能:显示全部学生记录。
(4) 查询功能:按姓名查询或按学号查询学生记录,并显示。
(5) 成绩信息的删除:删除指定学号学生的成绩信息。
(6) 统计功能:输入任意一个课程名(如高数)和一个分数段(如60--70),统计出在此分数段的学生人数。
(7) 排序功能:按学生平均成绩进行排序并输出显示。
(8) 提供一个主界面调用各个功能。
(9) 调用界面和各功能的操作界面应清晰美观。
2.2 主界面参考
参考例1
参考例2
2.3 其他说明
学生信息数据以结构体数组组织;或以链表形式组织;或以文件形式保存(可加分)可以利用网络资源,运用课堂没有讲的C语言知识,例如,srand和rand配合使用产生伪随机数序列,用于随机产生学生各科成绩。
第3章 课程设计内容
3.1 系统功能设计(画图并说明)
3.2 系统流程图
3.3 函数功能及函数原型说明
void input();输入学生信息
void search();查找学生信息
void browse();浏览全部学生信息
void alter();修改学生信息
void delete();删除学生信息
void menu();主菜单
3.4 调试分析
在输入第一个学生学号之后程序无法继续进行
3.5 心得与体会
在寒假期间,我在家完成了本次C语言的程序设计作业——学生信息管理系统,通过本次作业,我发现了自己的不足之处并有些许心得体会。
在编写代码时,我经常会因粗心等原因,出现一些错误,这些错误看似不起眼,但是在重新生成解决方案时都被暴露出来,导致程序无法运行。只有重新从头仔细地通篇检查几遍,才能发现错误并改正,这无疑大大加大了我的工作量,消耗了我更多的精力。同时,也反映了我对于C语言尚有不熟悉的地方,还需要更多的练习才能更上一层楼。
C语言作为一种计算机语言,我们通过学习C语言可以更好地,更深层次地了解计算机,从而打开计算机世界的大门。
在做本次课程设计之前,虽然我已经对c语言这门课程学习了一个学期,且对其有了一定的了解,但是这也仅仅是停留在浅显的表层。如何将抽象的实际问题转化为用C语言组成的程序,这是完成本次作业的第一步。在运用C语言来实现目标程序的时候,我清晰地了解到自己在C语言方面还有很多漏洞以及不清楚的地方。在这个编写的过程中,我一边努力地实现程序,一边翻阅书本,温故而知新。
C语言作为数据科学与大数据技术这一专业的必修课,也是我们的启蒙课,毋庸置疑,它为我们大学四年的学习生活打下了基础。正因为如此,我们才更要学好C语言,注重将理论与实践相结合,由浅入深,将一个复杂的程序分解为一个个小程序,再通过函数将其表达出来,实现我们的目的。
这次关于学生信息管理系统的课程设计作业,巩固和加深了我对C语言课程的基本知识的理解和掌握,初步掌握C语言编程和程序调试的基本技能,掌握书写程序设计说明文档的能力,在一定程度上提高了我运用C语言解决实际问题的能力。
同时,我也清晰地明白到上机实践的重要性和亲手写出一个完整程序的喜悦感和成就感。我将会继续努力学习接下来的Python语言和其他课程。
第4章 软件使用说明
本部分内容为你的软件使用过程介绍,场景为一个陌生用户,他没有使用经验,获得了你的软件,通过阅读本部分内容能够理解并正确使用你设计的各功能。可以先总体介绍使用流程,关键步骤截图说明。
以下为截图说明参考
例1. 运行程序后显示【截图】
例2. 输入学生信息【截图】
例3.显示所有信息【截图】
例4.查找指定学号
附录 各功能模块的实现及其程序清单
1.参考
#include
#include
#include
/*定义结构体变量*/
typedef struct students
{
char name[20];
char num[15];
float score[M];
float average;
float total;
}
STUSCORE;
STUSCORE stu[20];
int S;
/*函数声明*/
void menu(void); //主界面, 菜单系统
void choose(void); //功能选择
……
……
/*主函数调用*/
int main(void)
{ menu();
choose();
}
/*主界面, 菜单系统*/
void menu(void)
{
system("CLS");
printf("\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");
printf("\t^* *^\n");
printf("\t^* 。。。。。。欢迎使用成绩管理系统。。。。。。。 *^\n");
printf("\t^* *^\n");
printf("\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");
printf("\n");
printf("\t#########################################################\n");
printf("\t# 请输入学生的分数.....................1 #\n");
printf("\t# 搜索学生分数 ....................2 #\n");
printf("\t# 搜索学生的优秀通过率.................3 #\n");
printf("\t# 搜索学生的通过状况...................4 #\n");
printf("\t# 搜索个人各门成绩分数.................5 #\n");
printf("\t# 离开.................................6 #\n");
printf("\t#########################################################\n");
printf("\n\t请选择:\n");
}
/*功能菜单选择*/
void choose(void)
{
int x,flag=0;
while(flag==0)
{
scanf("%d",&x);
getchar();
switch(x)
{ case 1:input();savescore();loadscore();menu();choose();flag=1;break;
case 2:choosec();flag=1;break;
case 3:excellent();flag=1;break;
case 4:passing();flag=1;break;
case 5:personal();flag=1;break;
case 6:Exit();flag=1;
default:printf("\tSorry,your choose doesn't exist! please choose again!\n");
}
}
}
代码:
#include
#include
#include
#define LEN 15 /* 学号和姓名最大字符数,实际请更改*/
#define N 50 /* 最大学生人数,实际请更改*/
int k = 1, n = 0, m = 0;/* n代表当前记录的学生人数*/
//函数声明
void input();
void search();
void browse();
void alter();
void delete();
void menu();
//结构体保存学生信息
struct student
{
char Studentid[LEN + 1];
char StudentName[LEN + 1];
int StudentAge;
char StudentSex;
float score[3];
}
stu[N];
int main()
{
while (k)
{
menu();
}
return 0;
}
void menu()
{
int a;
printf("\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");
printf("\t^* *^\n");
printf("\t^* 。。。。。。。。欢迎使用成绩管理系统。。。。。。。。*^\n");
printf("\t^* *^\n");
printf("\t^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^\n");
printf("\n");
printf("\t#################################################\n");
printf("\t# 录入信息.....................1 #\n");
printf("\t# 浏览全部信息.................2 #\n");
printf("\t# 查询信息.....................3 #\n");
printf("\t# 修改信息.....................4 #\n");
printf("\t# 删除信息.....................5 #\n");
printf("\t#################################################\n");
printf("请选择:\n");
scanf_s("%d", &a);
switch (a)
{
case 1:input(); break;
case 2:browse(); break;
case 3:search(); break;
case 4:alter(); break;
case 5:delete(); break;
default:printf("\t选择错误,请重新选择\n");
}
}
void input()
{
int i = n, j, flag;
printf("请输入待增加的学生数:\n");
scanf_s("%d", &m);
if (m > 0)
{
do
{
flag = 1;
while (flag)
{
flag = 0;
printf("请输入第%d位学生的学号:\n", i + 1);
scanf_s("%s", stu[i].Studentid);
for (j = 0; j < i; j++)
{
if (strcmp(stu[i].Studentid, stu[j].Studentid) == 0)
{
printf("该学号已存在,请重新输入!\n");
flag = 1;
break;
}
}
}
printf("请输入第%d 个学生的姓名:\n", i + 1);
scanf_s("%s", stu[i].StudentName);
printf("请输入第%d 个学生的年龄:\n", i + 1);
scanf_s("%d", &stu[i].StudentAge);
printf("请输入第%d 个学生的性别:\n", i + 1);
scanf_s(" %c", &stu[i].StudentSex);
printf("请输入第%d 个学生的C语言成绩\n", i + 1);
scanf_s("%lf", &stu[i].score[0]);
printf("请输入第%d 个学生的高等数学成绩:\n", i + 1);
scanf_s("%lf", &stu[i].score[1]);
printf("请输入第%d 个学生的大学英语成绩:\n", i + 1);
scanf_s("%lf", &stu[i].score[2]);
if (0 == flag)
{
i++;
}
} while (i < n + m);
}
n += m;
}
void browse()
{
int i;
printf("共有%d位学生的信息:\n", n);
if (0 != n)
{
printf("学生学号 \t学生姓名 \t年龄 \t性别 \tC语言成绩\t高等数学 \t大学英语成绩\n");
printf("--------------------------------------------------------------------\n");
for (i = 0; i < n; i++)
{
printf("%s \t%s \t%d \t%c \t%.1f\t%.1f \t%.1f\n", stu[i].Studentid, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}
}
void search()
{
{
int i, item, flag;
char s1[21]; /* 以姓名和学号最长长度+1为准*/
printf("------------------\n");
printf("-----1.按学号查询-----\n");
printf("-----2.按姓名查询-----\n");
printf("-----3.退出本菜单-----\n");
printf("------------------\n");
while (1)
{
printf("请选择菜单编号:");
scanf_s("%d", &item);
flag = 0;
switch (item)
{
case 1:
printf("请输入要查询的学生的学号:\n");
scanf_s("%s", s1);
for (i = 0; i < n; i++)
if (strcmp(s1, stu[i].Studentid) == 0)
{
flag = 1;
printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t%d\t%6\t%.1f\t%.1f\t%.1f\n", stu[i].Studentid, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
if (0 == flag)
printf("该学号不存在\n"); break;
case 2:
printf("请输入要查询的学生的姓名:\n");
scanf_s("%s", s1);
for (i = 0; i < n; i++)
if (strcmp(stu[i].StudentName, s1) == 0)
{
flag = 1;
printf("学生学号\t学生姓名\t年龄\t性别\tC语言成绩\t高等数学\t大学英语成绩\n");
printf("--------------------------------------------------------------------\n");
printf("%s\t%s\t%d\t%c\t%.1f\t%.1f\t%.1f\n", stu[i].Studentid, stu[i].StudentName, stu[i].StudentAge, stu[i].StudentSex, stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
if (0 == flag)
printf("该姓名不存在\n"); break;
case 3:return;
default:printf("请在1-3之间选择\n");
}
}
}
}
void alter()
{
int i, item, num = -1;
char sex1, s1[LEN + 1], s2[LEN + 1];
float score1;
printf("请输入要要修改的学生的学号:\n");
scanf_s("%s", s1);
for (i = 0; i < n; i++)
{
if (strcmp(stu[i].Studentid, s1) == 0)
{/*比较字符串是否相等*/
num = i;
printf("------------------\n");
printf("1.修改年龄\n");
printf("2.修改性别\n");
printf("3.修改C语言成绩\n");
printf("4.修改高等数学成绩\n");
printf("5.修改大学英语成绩\n");
printf("6.退出本菜单\n");
printf("------------------\n");
while (1)
{
printf("请选择菜单编号:");
scanf_s("%d", &item);
switch (item)
{
case 1:
printf("请输入新的年龄:\n");
scanf_s("%d", stu[num].StudentAge);
break;
case 2:
printf("请输入新的性别:\n");
scanf_s("%s", &sex1);
stu[i].StudentSex = sex1;
break;
case 3:
printf("请输入新的C语言成绩:\n");
scanf_s("%f", &score1);
stu[num].score[0] = score1;
break;
case 4:
printf("请输入新的高等数学成绩:\n");
scanf_s("%f", &score1);
stu[num].score[1] = score1;
break;
case 5:
printf("请输入新的大学英语成绩:\n");
scanf_s("%f", &score1);
stu[num].score[2] = score1;
break;
case 6: return;
default:printf("请在1-7之间选择\n");
}
}
printf("修改完毕,请及时保存\n");
}
else
{
printf("没有该学生学号");
}
}
}
void delete()
{
int i, j, flag = 0;
char s1[LEN + 1];
printf("请输入要删除学生的学号:\n");
scanf_s("%s", s1);
for (i = 0; i < n; i++)
{
if (s1 == 0)
{
flag = 1;
//要删除学生后面的学生往前移一位
for (j = i; j < n - 1; j++)
{
stu[j] = stu[j + 1];
}
}
}
//查找失败
if (0 == flag)
{
printf("该学号不存在\n");
}
if (1 == flag)
{
printf("删除成功");
//删除成功,学生人数减1
n--;
}
printf("没有该学生学号");
}