C语言学生管理系统论文.docx
《C语言学生管理系统论文.docx》由会员分享,可在线阅读,更多相关《C语言学生管理系统论文.docx(25页珍藏版)》请在冰豆网上搜索。
![C语言学生管理系统论文.docx](https://file1.bdocx.com/fileroot1/2023-1/26/271fd056-fb0a-4291-a769-ed2f5174f748/271fd056-fb0a-4291-a769-ed2f5174f7481.gif)
C语言学生管理系统论文
综合实验报告
(2008--2009年度第1学期)
实验名称:
C语言课程设计
题目:
学生籍贯信息记录簿
院系:
控制于计算机学院
班级:
计算0802班
成员学号:
1101250224
成员姓名:
温裕青
指导教师:
郑玲
设计周数:
2周
成绩:
1本次课程设计目的
通过一个企业人事管理系统,使学校档案管理工作系统化、规范化、自动化,从而达到提高学校管理效率。
使学生掌握一门高级程序设计语言,了解面向对象程序设计的基本概念与方法,进而学会利用C++语言学会解决一般应用问题,并为后续的专业课程奠定程序设计基础。
系统的基本模块:
根据系统功能的要求,学生档案系统可以分为新学生档案的输入,学生档案的修改、查询和删除等模块。
2系统需求分析
2.1问题定义
项目:
学生管理应用软件。
目的:
让院校有效的管理体制学生信息,帮助学校老师掌握学生的情况。
背景:
根据当前某高校的学生管理出现异常问题,它浪费人力和其它资源。
因此,这种缺陷而制定开发这个学生管理系统软件。
2.2可行性研究
从技术方面,是通过C来做系统的前台,来实现整系统的功能;从操作方面,基本的录入、查询、修改等都能满足用户的需求;此次设计没有考虑经济可行性。
经过这一阶段确定了该系统的粗略系统流程图。
可行研究阶段的目标是:
使工作人员从繁琐的填表,查表工作中解放出来;提高工作质量,使供需双方都获得满意的结果;促进报表,提高工作效率。
2.3需求分析
应该确定系统必须在MicrosoftVisualC++6.0的环境下实现具有添加新学生、显示全部、删除、删除全部、修改、退出等功能的学生档案管理系统。
通过以上可以知道该软件主要有以下功能模块:
Ø学生学籍异动管理
Ø奖惩情况管理
Ø档案管理
Ø成绩管理
Ø考勤管理
其中本次课程设计实现的档案模块又分为如下子模块:
Ø登陆界面:
主要是对用户权限的判断,.判断是否为合法用户,是合法用户的就可以对数据进行。
Ø新生录入:
主要是将新生信息录入到数据库中;
Ø管理项目:
对学生信息进行添加、删除、修改、查询等。
3设计流程及算法
3.1总体设计:
1.设置输入输出流及将程序由磁盘文件保存,构件类stu,其主要包括:
学号,姓名,籍贯.
2.构建无返回值main函数,输出由与程序相关操作构成的信息链表
3.根据链表设置利用switch函数和循环函数将链表中的内容一一实现.
3.2详细设计:
设计流程图:
目前程序已达到的功能
档案管理
添加
修改
查询
删除
系统
图3.1系统设计流程图
一.信息链表内容如下:
请选择您需要的操作
操作:
(1)数据录入
(2)增加人员
(3)删除人员
(4)修改数据
查询:
(5)按姓名查询
(6)按学号查询
(7)输出所有学生的籍贯信息
(8)按籍贯查询
二.选择相关操作请输入相对应的括号里的阿拉伯数字。
三.设置do-while函数使输入序号与符号所需要求相对应。
四.在do函数中设立switch语句,实现多分支选择结构,并实现序号与相应内容的对应关系.
Switch
Case0
数据录入
case1
增加人员
case2
删除人员
case3
修改数据
case4
按姓名查询
case5
输出所有学生的籍贯信息
case6
按籍贯查询
图3.2
3.3算法的实现与运行:
在程序开始运行是既会出现一信息链表,按链表要求输入序号,若输入的数字不是在0-7这个范围之内则要求重新输入。
而实现该过程需要利用到boor语句和if循环。
1case0数据录入:
以cin和cout形式输入学号,籍贯,姓名,以file[j]形式存入到数组s[i]中,并将信息存入到磁盘中.
file[j]=newofstream("d:
\\document.txt",ios:
:
ate);其作用是将输入的数据存入到已有的文件,文件指针指向文件末尾。
既是将录入的内容添加到文件的末尾。
并在输入完成后将*file[j]和s[i]中的i和j都自加1,既是自动使文件指针指向文件末尾。
charc;
charname[20],bornplace[50];intnumber;
do
{
cout<<"请输入姓名"<cin>>name;
cout<<"请输入学号:
"<cin>>number;
cout<<"请输入籍贯:
"<cin>>bornplace;
file[j]=newofstream("d:
\\document.txt",ios:
:
ate);
*file[j]<<"姓名"<j++;
s[i]=newstu(name,number,bornplace);
i++;
2case1增加人员:
定义字符型变量姓名,籍贯,学号,并根据其大小分配相应的内存空间。
输入相关内容,利用指针使输入的数据直接存入到内存中。
charname[20],bornplace[50];intnumber;
charc;
do
{
cout<<"请输入您要增加的学生的姓名:
"<cin>>name;
cout<<"请输入学号:
"<cin>>number;
cout<<"请输入籍贯:
"<cin>>bornplace;
file[j]=newofstream("d:
\\document",ios:
:
ate);
*file[j]<<"姓名"<j++;
s[i]=newstu(name,number,bornplace);
i++;
③case2删除人员:
定义字符型变量姓名并分配20个字节的内存空间,定义布尔型变量控制函数。
利用if和do-while函数在数据库中寻找相对应姓名的数据,找到后将其删除。
在未找到的情况下重新输入需要查找的人的姓名。
在删除人员上使用的方法为间接删除,即在s[h]->name中找到与输入name相同的数据后,使其在输出时是不显示的。
charname[20];boolflag3=0;charc;
do
{
cout<<"请输入您要删除的学生姓名:
"<cin>>name;
for(inth=0;h
{
if(strcmp(name,s[h]->name)==0)
{
flag3=1;
i--;
do
{
s[h]=s[h+1];
h++;
}
while(h<=i);
}
}
if(flag3==0)
cout<<"您要求删除的对象本来就不存在!
请检查输入的正确性!
";
3case3修改数据:
定义字符型变量姓名,籍贯,整型变量学号和布尔型变量,在利用do-while函数进行控制,在函数内输入学生的姓名,并利用程序中的strcmp函数改变原数据库中对应学生姓名下的各个信息。
其原理即是寻找到需要修改的学生后用重新输入的数据信息将原信息覆盖,从而实现文件的修改。
charname[20],born[50];intnum;;flag2=0;
charc;
do
{
cout<<"请输入您要修改的学生的姓名:
"<cin>>name;
for(inth=0;h
{
if(strcmp(name,s[h]->name)==0)
{
flag2=1;
cout<<"请输入新的学号:
"<cin>>num;
cout<<"请输入新的籍贯:
"<cin>>born;
s[h]->number=num;
strcpy(s[h]->bornplace,born);
cout<<"数据修改成功!
";
⑤case4按姓名查询:
定义一字符型数组,输入要查询学生的姓名,利用指针和strcmp函数及for循环在数据库中寻找相应的数据,在找到后输出。
其寻找的格式为(*s[q]).name。
在找到后依次输出同一个类中的其他的内容。
chart[20];
charc;
do
{
intflag1=0;
cout<<"请输入你要查询学生的姓名"<cin>>t;
for(intq=0;q
{
if(strcmp((*s[q]).name,t)==0)
{
flag1=1;
cout<<"您要查询的学生是:
"<<(*s[q]).name<<"学号是:
"<<(*s[q]).number<<"籍贯是:
"<<(*s[q]).bornplace<}
}
if(flag1==0)
cout<<"对不起!
您要查询的学生不存在!
"<⑥case5按学号查询:
其主要操作与按姓名查询相似。
⑦case7按籍贯查询:
其主要操作与按姓名查询相似。
⑧case6输出所有学生的籍贯信息:
利用strcmp函数将数据库中与要查询的学生相对应的信息内容从数据库中调出。
其输出的方式为循环方式,设置循环条件,利用if语句,设置变量k,使k从0进行自加,直到k的值为h,并依次将s[k]的值输出,从而达到输出所有学生的学籍信息的目的。
cout<<"本系统所有学生的籍贯信息如下:
"<if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!
"<for(intk=0;k
{
cout<"<<""<name<<""<<
"学号:
"<<""<number<<""<<"籍贯:
"<<""<bornplace<}
break;
4数据结构的设计
数据字典:
数据字典包括以下几种类型的条目:
数据流条目--数据流条目给出某个数据流和定义,它通常是列出该数据流的各组成数据元素。
该系统中的数据流条目有:
学生基本信息=学生姓名+学生学号+学生籍贯
班级信息=班号+年级
逻辑结构的设计如表5.1所示:
表4.1学生基本信息结构设计
列名
数据类型
可否为空
说明
name
char[20]
NOTNULL
学生姓名
number
int
NOTNULL
学号
bornplace
char[50]
NOTNULL
籍贯
5软件的测试与调试
登陆界面:
图6.0
1)输入0后并输入相关数据呈现的界面:
图6.1
2)输入1后并输入相关数据呈现的界面:
图6.2
3)在第一步和第二步的基础上使用操作2后上呈现的界面:
图6.3
4)在第一步,第二步的基础上使用操作3后上呈现的界面:
图6.4
5)在第一步,第二步和第四步的基础上使用操作4后上呈现的界面:
图6.5
6)在前几步的基础上使用操作5后上呈现的界面:
图6.6
7)在前几步的基础上使用操作6后上呈现的界面:
图6.7
8)在前几步的基础上使用操作7后上呈现的界面:
图6.8
6课程设计心得
在本次课程设计中,我利用到了本学期学到的大部分知识,而在次程序中,最主要运用是在数组和类及在指针的运用方面。
同时明白只要充分的融会贯通在课堂上学会的东西并在课后积极的进行程序设计的训练,增加自己对C程序语言的了解,并应取尽早的熟练的使用这一门语言。
通过此学期的学习我了解到了C作为一种面向对象的程序设计语言,它支持对类的抽象。
而在此程序中,主要运用的知识为函数的循环系统,类的组成,对象成员的应用等,而访问对象中的成员可以有三种方法,通过对象名和成员运算符访问对象中的成员,通过指向对象的指针访问对象中的成员,通过对象的引用变量访问对象中的成员。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
7附录:
源程序清单:
#include//输入输出流
#include//类的运算
#include//用来支持对磁盘文件的输出
#include
classstu//构造一个类,类名为stu
{
charname[20];//名字
intnumber;//学号
charbornplace[50];//出生地
public:
stu()
{
}
stu(charn[20],intnum,charborn[50])
//将n,num,born的内容复制给name,number,bornplace
{
strcpy(name,n);
number=num;
strcpy(bornplace,born);
}
friendvoidmain();//友元函数
};
voidmain()
{
cout<<"请选择您需要的操作!
"<cout<<"操作:
"<cout<<"(0)数据录入"<cout<<"
(1)增加人员"<cout<<"
(2)删除人员"<cout<<"(3)修改数据"<cout<<"查询:
"<cout<<"(4)按姓名查询"<cout<<"(5)按学号查询"<cout<<"(6)输出所有学生的籍贯信息"<cout<<"(7)按籍贯查询"<cout<<"选择相关操作请输入相对的括号里的阿拉伯数字!
"<charp;charw;
stu*s[50];//定义指针变量
ofstream*file[50];//定义指针变量
inti=0;
intj=0;
boolflag2=0;//布尔运算,使输入的数字在0-7范围之内
do
{
cin>>p;//命题为真时
if((p>='0'&&p<='7'))
flag2=1;
else//命题为假时令重新输入
cout<<"指令错误!
请重新输入:
"<}
while(flag2==0);
//构造while-do函数,使序号与内容之间实现对应关系
do
{
switch(p)//switch函数,利用case条件实现功能
{
case'0':
//数据录入
{
charc;
charname[20],bornplace[50];intnumber;//定义内容变量
do//实现数据录入中的录入功能
{
cout<<"请输入姓名"<cin>>name;
cout<<"请输入学号:
"<cin>>number;
cout<<"请输入籍贯:
"<cin>>bornplace;
file[j]=newofstream("d:
\\document.txt",ios:
:
ate);
//将录入的内容存入磁盘中
*file[j]<<"姓名"<j++;
s[i]=newstu(name,number,bornplace);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<cin>>c;
flag2=0;
do//控制输入内容为y或n
{
if(c!
='y'&&c!
='n')//if语句为控制条件
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
else
flag2=1;
}
while(flag2==0);
}
while(c=='y');
break;
}
case'1':
//增加人员
{
charname[20],bornplace[50];intnumber;//定义变量
charc;
do
{
//输入要增加的学生的相关内容
cout<<"请输入您要增加的学生的姓名:
"<cin>>name;
cout<<"请输入学号:
"<cin>>number;
cout<<"请输入籍贯:
"<cin>>bornplace;
file[j]=newofstream("d:
\\document",ios:
:
ate);
//将输入的内容存入磁盘空间
*file[j]<<"姓名"<j++;
s[i]=newstu(name,number,bornplace);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<cin>>c;
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
}while(c=='y');
break;
}
case'2':
//删除人员
{
charname[20];boolflag3=0;charc;
do
{
cout<<"请输入您要删除的学生姓名:
"<cin>>name;
for(inth=0;h
{
if(strcmp(name,s[h]->name)==0)
//通过指针使要删除的学生信息被跳过,次删除方式为间接删除
{
flag3=1;
//命题为真是学生总人数减1,并使指针跳过需要删除的人员
i--;
do
{
s[h]=s[h+1];//指针跳过需要删除的人员
h++;
}
while(h<=i);
}
}
if(flag3==0)//若输入的学生不存在则执行以下内容
cout<<"您要求删除的对象本来就不存在!
请检查输入的正确性!
";
cout<<"要继续删除吗?
(y/n)"<cin>>c;
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
}
while(c=='y');
break;
}
case'3':
//修改数据
{
charname[20],born[50];intnum;;flag2=0;
charc;
do
{
cout<<"请输入您要修改的学生的姓名:
"<cin>>name;
for(inth=0;h
{
//用重新输入的内容将原有信息覆盖
if(strcmp(name,s[h]->name)==0)
{
flag2=1;
cout<<"请输入新的学号:
"<cin>>num;
cout<<"请输入新的籍贯:
"<cin>>born;
s[h]->number=num;
strcpy(s[h]->bornplace,born);
cout<<"数据修改成功!
";
}
}
if(flag2==0)//确定输入的正确性
{
cout<<"您要修改的学生本来就不存在!
请检查重新输入!
"<}
cout<<"想继续修改吗(y/n)"<cin>>c;
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
}
while(c=='y');
break;
}
case'4':
//按姓名查询
{
chart[20];
charc;
do
{
intflag1=0;
cout<<"请输入你要查询学生的姓名"<cin>>t;
for(intq=0;q
{
if(strcmp((*s[q]).name,t)==0)
{
flag1=1;
cout<<"您要查询的学生是:
"<<(*s[q]).name<<"学号是:
"<<(*s[q]).number<<"籍贯是:
"<<(*s[q]).bornplace<}
}
if(flag1==0)
cout<<"对不起!
您要查询的学生不存在!
"<cout<<"您想继续查询吗?
(y/n)"<cin>>c;
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
}
while(c=='y');
break;
}
case'5':
//按学号查询
{
intn;intj=0;charc;
do
{
intflag=0;
cout<<"请输入你要查询的学生学号:
"<cin>>n;
for(intj=0;j
{
intno=((*s[j]).number);
if(no==n)
{
flag=1;
cout<<"您要查询的学生是:
"<<(*s[j]).name<cout<<"籍贯是:
"<<(*s[j]).bornplace<}
}
if(flag==0)
cout<<"对不起!
您要查询的学生不存在!
"<cout<<"您想继续查询吗?
(y/n)"<cin>>c;
if(c!
='y'&&c!
='n')
{
cout<<"指令错误!
请重新输入!
"<cin>>c;
}
}
while(c=='y');
break;
}
case'6':
//输出所有学生的籍贯信息
{
cout<<"本系统所有学生的籍贯信息如下:
"<if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!
"<for(intk=0;k
{
cout<"<<""<name<<""<<
"学号:
"<<""<number<<""<<"