C语言课程设计大作业——学生管理系统(详细含报告和源码)
写在前面:欢迎来到「发奋的小张」的博客。我是小张,一名普通的在校大学生。在学习之余,用博客来记录我学习过程中的点点滴滴,也希望我的博客能够更给同样热爱学习热爱技术的你们带来收获!希望大家多多关照,我们一起成长一起进步。也希望大家多多支持我鸭,喜欢我就给我一个关注吧!
题目:学生管理系统设计
功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名、学号、性别、出生年月、专业、班级、家庭地址、宿舍号码等。
系统要求实现以下功能:
1、输入功能:录入学生信息(包括学生学号、姓名、性别、出生年月、专业等);
2、显示功能:完成学生记录的显示。
3、查找功能:完成按学号或姓名查找学生的相关记录,并显示。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、完成信息的录入和显示(即通过编程创建文件,输入学生信息并可将文件内容显示出来)3、完成修改功能,即输入学号,可修改该学生的信息4、进一步要求,在使用修改功能时要求输入密码,密码正确才能修改信息否则不行。
要求:1、用C语言实现程序设计;
2、利用结构体数组、链表等实现学生信息表达、查询等,充分体现数据结构的知识;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序要有注释。
5、程序中所用到的排序查找方法需采用数据结构中所学方法实现,要求方法实用效率高。
一、总体设计
1.程序的总体设计
学生管理系统是具有统计,管理学生各种在校相关信息,方便学校对于学生信息的统一管理的系统。
随着高校的扩招,需要处理的学生信息日趋加大,不仅花费大量的教师资源,处理的效率还十分低下。为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它解决了学生管理数据信息量大,修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息,成为管理高校中必不可少的管理工具。
管理员对系统的功能需求:
有关学生信息的输入功能
有关学生信息的显示功能
有关学生信息的查找功能
有关学生信息的修改功能
有关学生信息的修改加密功能
有关界面的人机交互友好化功能
有关学生信息的存储和读取功能
2. 数据结构
数据结构如下:
//定义结构体
typedef struct person
{
char num[10]; //学号
char name[15]; //姓名
int sex; //性别 0为女 1为男
char birth[10]; //出生年月
char ji[20]; //专业
}person;
3. 函数原型声明
函数声明:
void menu_filename()
void menu_select()
void add()
void scan()
void query()
void date()
void amend()
void delet()
void main()
二、功能实现
1.main( )流程图
2.void amend()流程图
3.void delet()流程图
4.void date()流程图
5.void amend()流程图
三、测试及调试(测试方案、存在的问题及解决方法)
(1)详细设计中存在的问题和分析
没有判断输入的信息是否正确,可以输入任何形式的数据。
(2)调试和测试中存在的问题和分析
每执行一个操作后一定要执行保存功能,这样才能将信息及时准确无误的把存入文件。
通过简单的输出函数来判断是否执行某一程序块。通过某些清屏及取字符函数调整结果的显示问题。
四、总结
经过这次课程设计,我学到了很多东西:
①巩固和加深了对编程的理解,提高综合运用本课程所学知识的能力。
②培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。
③经过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
④能够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。
这次高级语言程序设计,学生成绩管理系统,让我对高级语言有了进一步的认识。首先,想要学好这门课程,主要在于实践,要通过不断地上机操作才能更好的学习它。
之后,课程设计期间,在调试出现很多错误,很多警告的过程中我的知识也在得到不断地巩固;当你把代码输入电脑,并用编译器将其运行,发现通过不了,再来检查找出问题,这是一件非常辛苦的事情,也很浪费时间。于是在课程设计的时候,我花了好几天的时间来规划与写代码,将要实现的内容分析清楚,才把代码输入电脑。我们觉得写程序,应该先找到该程序中的核心地方,用多种方法来实现该核心,这才可能避免等到发现逻辑上或者编译器不支持上的错误,才来想补救的措施,这样花费时间在想补救措施是很不值得的。也让我学到了很多人生的哲理:懂得怎样去制定计划,怎样去实现这个计划,并掌握了在执行过程中怎样去克服心理上的不良情绪。我们对于高级语言的理解和使用还处在一个初级的阶段,我们要想掌握它,要学习的还很多,同时要懂得创新,许多的编程方法都是人们一步一步总结出来的,要努力拓展自己的思维,努力去寻求新的方法,以创造出更为完善的应用程序。
课程设计是把我们所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析实际问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并为走向社会打下一个良好的基础。
五,源代码
由于篇幅过大,此处只粘贴部分代码,想要源代码的小伙伴,可以去这个链接下载!
下载链接: 源码.
若链接失效,可私聊博主获取。
代码:
/*
? C语言课程设计任务书及指导书5
题目:学生管理系统设计
功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名、学号、性别、出生年月、专业、班级、家庭地址、宿舍号码等。
系统要求实现以下功能:
1、输入功能:录入学生信息(包括学生学号、姓名、性别、出生年月、专业等);
2、显示功能:完成学生记录的显示。
3、查找功能:完成按学号或姓名查找学生的相关记录,并显示。
分步实施:1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。2、完成信息的录入和显示(即通过编程创建文件,输入学生信息并可将文件内容显示出来)3、完成修改功能,即输入学号,可修改该学生的信息4、进一步要求,在使用修改功能时要求输入密码,密码正确才能修改信息否则不行。
要求:1、用C语言实现程序设计;
2、利用结构体数组、链表等实现学生信息表达、查询等,充分体现数据结构的知识;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序要有注释。
5、程序中所用到的排序查找方法需采用数据结构中所学方法实现,要求方法实用效率高。
?
课程设计实验报告要求:
1、预习报告:题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分 。
2、实验总结报告:流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案、
小结等。
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct person //定义结构体
{
char num[10]; //学号
char name[15]; //姓名
int sex; //性别 0为女 1为男
char birth[10];//出生年月
char ji[20]; //专业
}person;
person per[100]; //定义100
char filename[20]; //定义全局变量
void menu_filename()
{
system("cls");
printf("请输入你要操作的文件名:");
scanf("\t%s",filename);
}
int menu_select() //菜单选择系统函数
{
char c;
do{
system("cls");
printf("\t\t ******************************\n");
printf("\t\t * 学生管理系统 *\n");
printf("\t\t ******************************\n");
printf("\t\t ┌─────────────—┐\n");
printf("\t\t │ 1. 添加记录 2. 显示记录 │\n");
printf("\t\t │ │\n");
printf("\t\t │ 3. 信息查询 4. 数据计算 │\n");
printf("\t\t │ │\n");
printf("\t\t │ 5. 修改记录 6. 删除记录 │\n");
printf("\t\t │ │\n");
printf("\t\t │ 0. 退出程序 │\n");
printf("\t\t └─────────────—┘\n");
printf("\t\t请您选择(0-6):");
c=getchar();
}while(c<'0'||c>'6');
return (c-'0'); //字符减去’0‘得到的是数字整型//
}
//*********************************************************************//
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
void add() //添加函数
{
FILE *fp;
int i=0,n=0;
char ch='y'; //首先定义ch='y'
system("cls"); //清屏函数 系统中调用
while(ch =='y'|| ch =='Y') //其实只有当输入N或n时才跳出循环
{
printf(" ----学生纪录添加----\n");
printf("学号:\n");
scanf("\t%s",per[i].num);
printf("姓名:\n");
scanf("\t%s",per[i].name);
printf("性别:\n");
scanf("\t%d",&per[i].sex);
printf("出生年月(例如2000年2月==》200002):\n");
scanf("\t%s",&per[i].birth);
printf("专业:\n");
scanf("\t%s",&per[i].ji);
printf("是否继续添加?(y/n)");
ch = getchar();
i++;
n=n+1;
system( "cls ");
}system("pause"); //等待命令
if((fp=fopen(filename,"a"))==NULL) //以2进制形式进行文件尾追加//
{
printf("cannot open the files\n");
system("pause");
return; //如果文件出现错误 就返回
}
for(i=0;i<n;i++)
if(fwrite(&per[i],sizeof(person),1,fp)!=1) //以2进制形式写入文件中//一次写入一个数组//
printf("file write error\n");
fclose(fp); //关闭文件
system("pasue");
}
//*********************************************************************//
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
void scan() //显示记录 进行全面信息浏览
{
void amend(); //声明修改函数//
char sign='y';
FILE *fp;
int i=0,n;
system("cls");
if((fp=fopen(filename,"r"))==NULL) //以2进制方式读取文件信息//
{
printf("cannot open the files\n");
system("pause");
return;
}
while(!feof(fp)) //一直读取知道文件尾结束
{
fread(&per[i],sizeof(person),1,fp); //以2进制方式将文件信息读到数组内存中//一次读取一个//
i++;
}
fclose(fp);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
printf(" 学号 姓名 性别 出生 专业\n");
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
for(n=0;n<i-1;n++) //循环全部输出
printf("\t%s \t%s \t\t%d \t%s \t%s\n",per[n].num,per[n].name,per[n].sex,per[n].birth,per[n].ji);
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
system("pause");
system("cls");
printf("是否需要修改?(y/n)");
scanf("\t%c",&sign);
if(sign!='n'&&sign!='N') //选择是否在浏览后进行修改//
amend();
system("pause");
}
//*********************************************************************//
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
//数据查询//
void query() //学生信息的不同方式查询
{
FILE *fp;
int i=0,n=0;
int m;
system("cls");
printf("\t\n请选择查询方式:\n");
printf("\t┌──────┐\n");
printf("\t│1------姓名 │\n");
printf("\t│2------学号 │\n");
printf("\t│3------返回 │\n");
printf("\t└──────┘\n");
printf("请输入你要查询的方式\n");
scanf("%d",&m);
while(m!=1&&m!=2&&m!=3)
{
printf("输入错误请重新查询\n");
scanf("%d",&m);
}
if((fp=fopen(filename,"r"))==NULL) //以2进制方式读取文件信息//
{
printf("cannot open the files\n");
system("pause");
return;
}
while(!feof(fp))
{
fread(&per[i],sizeof(person),1,fp); //以2进制方式将文件信息读到数组内存中//一次读取一个//
i++;n=n+1;
}
if(m==1) //姓名查询
{
char s[20];
int i=0;
printf("\t请输入想查询的姓名:");
scanf("\t%s",s);
while(strcmp(per[i].name,s)!=0&&i<n) i++; //比较per[i].name与所输入姓名是否相同//
if(i==n)
{
printf("\t通讯录中没有此人!\n");
system("pause");
return;
}
printf("\t学号: %s\n",per[i].num);
printf("\t姓名: %s\n",per[i].name);
printf("\t性别: %d\n",per[i].sex);
printf("\t出生: %s\n",per[i].birth);
printf("\t计算机: %s\n",per[i].ji);
}
if(m==2) //学号查询
{
char s[15];
int i=0;
printf("请输入想查询的学号:");
scanf("\t%s",s);
while(strcmp(per[i].num,s)!=0&&i<n)i++; //比较per[i].name与所输入学号是否相同//
if(i==n)
{
printf("\t通讯录中没有此人!\n");
system("pause");
return;
}
printf("\t学号: %s\n",per[i].num);
printf("\t姓名: %s\n",per[i].name);
printf("\t性别: %d\n",per[i].sex);
printf("\t出生: %s\n",per[i].birth);
printf("\t计算机: %s\n",per[i].ji);
}
fclose(fp);
system("pause");
}
博主后记:
希望看到此篇博文的小伙伴,如果发现有什么不对的地方,欢迎在下方留言指正!博主一定虚心接受并改正!大家一起共同进步。如果对你有所帮助,可以给博主一个赞????。