《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx
- 文档编号:19008497
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:23
- 大小:99.09KB
《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx
《《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
记录指定学生的奖惩信息记录
按学号排序后输出
按学号排序后输出到屏幕,并保存到PeoInfo.txt文件
按绩点高低排序输出
按绩点高低排序后输出到屏幕,并保存到PeoInfo.txt文件
清除数据文件
清除PeoInfo.txt文件中的全部信息
学生信息更新/修改
通过学号更新/修改该学生的信息
作者&
版权信息
显示作者及课设的相关信息
三、程序运行平台
MicrosoftVisualC++6.0
四、系统总框架图
(图4-1)
(图4-2)
五、程序类的说明
Stu类的说明
classStu//父类,公用类
{
protected:
Info*person;
fstreampeople;
//创建二进制文件
public:
Stu();
virtualInfo*SearNum(char*)=0;
//按学号查找学生信息,纯虚函数
booloperator>
(constInfo*);
//比较成绩高低,重载>
运算符
friendvoidInputOne(Info*p1);
//友元函数
voidcreat();
//创建链表
~Stu();
};
Show类的说明
classShow:
publicStu//Stu的子类,显示模块,抽象类
voidShowOne(Info*);
//显示指定的学生信息
voidShowAll();
//显示所有学生的信息
Info*SearNum(char*);
voidListNum();
//按学号排序输出
voidListMark();
//按绩点高低排序输出
Manage类的说明
classManage:
publicShow//Show的子类,管理模块,多重继承
voidApply(char*);
//学籍证明
voidBook(char*);
//学生证预约
voidChange(char*);
//信息更新/修改
voidGoodBad(char*);
//奖惩情况录入
WrongIn类的说明
classWrongIn//用于捕捉输入异常
{};
六、模块分析
显示模块
查找模块
管理模块
1、开具学籍证明。
通过输入学号,开具该学生的学籍证明保存到Apply.txt文件中,并在屏幕上输出;
2、学生证预约登记。
记录指定学生的学生证预约登记记录;
3、奖惩信息录入。
记录指定学生的奖惩信息记录;
4、学生信息更新/修改。
通过学号更新/修改该学生的信息;
输出模块
1、按学号排序后输出。
按学号排序后输出到屏幕,并保存到PeoInfo.txt文件;
2、按绩点高低排序输出。
按绩点高低排序后输出到屏幕,并保存到PeoInfo.txt文件;
清除模块
版权信息模块
七、比较有特色的函数
纯虚函数SearNum
virtualInfo*SearNum(char*)=0;
Creat函数
voidStudent:
:
creat()//创建链表
Info*head;
Info*p1,*p2;
intn=0;
charGoOn='
Y'
;
p1=p2=newInfo;
InputOne(p1);
people.write((char*)p1,sizeof(*p1));
//二进制输出文件
head=NULL;
while(GoOn=='
||GoOn=='
y'
)
{
n++;
if(n==1)head=p1;
elsep2->
next=p1;
p2=p1;
system("
COLOR1e"
);
cout<
<
"
是否继续输入?
Y/N:
"
cin>
>
GoOn;
cin.ignore();
if(GoOn!
='
&
&
GoOn!
)//判断输入是否结束
{
people.close();
break;
}
p1=newInfo;
InputOne(p1);
}
p2->
next=NULL;
person=head;
}
——该函数通过指针和链表,动态存储学生信息,并保存到文件中
SearNum函数
Info*Student:
SearNum(char*a)//按学号查找学生信息
COLOR3d"
Info*p;
cout<
开始按学号查找!
\n"
p=person;
boolrecord=false;
while(p!
=NULL&
!
record)
if(strcmp(p->
num,a)==0)
ShowOne(p);
returnp;
record=true;
p=p->
next;
if(!
没有查找到相关数据!
——该函数通过链表查找数据,运用了布尔类型
>
运算符重载函数
boolStudent:
operator>
(constInfo*right)
if(person->
mark>
right->
mark)
returntrue;
elsereturnfalse;
——该函数重载了>
运算符,便于直接比较两结构体所存储数据的绩点高低
ListNum函数
ListNum()//按学号排序输出
Info*p1,*p2,*temp,*now;
inti=0;
COLOR3f"
开始按学号排序!
now=person;
p1=person;
p2=person->
while(p2&
i++<
=N)
if(strcmp(p2->
num,p1->
num)>
0&
p1==person)//插入到头结点之前
temp=p2;
p2=temp->
//在原链表中删除p2的信息
person=temp;
temp->
//p2插入到最前
if(strcmp(p2->
0)
p1=temp;
now=now->
p1=now;
p2=now->
fstreamlistnum;
listnum.open("
PeoInfo.txt"
ios:
out|ios:
binary);
while(p1)
listnum.write((char*)p1,sizeof(*p1));
p1=p1->
listnum.close();
ShowAll();
——运用链表和指针按学号大小排序全部学生信息
八、存在的不足与对策
类对象中的信息存储问题
描述:
类对象中用数组存储所有学生的信息,显得较为复杂,不方便管理和操作。
在数据的处理时造成一定的麻烦。
对策:
类外部定义Info结构体,在类内部用结构体+链表的方式存储学生的信息
文件写入的问题
用普通文件存储学生信息显得较为复杂,数据录入较为繁琐,不便于操作。
采用二进制文件的方式,整块录入结构体数据文件。
方便、快捷。
链表排序问题
对链表的操作掌握的不够熟练,对创建好的链表进行排序时显得手足无措,不能善于利用指针。
参考相关书籍,请教老师等。
程序细节问题
由于首次进行比较大规模的程序设计,程序中的很多输入输出细节没有注意到,导致某些格式不统一。
小组成员轮流校对程序,发现问题并改进。
九、程序源代码
另附:
1、程序单文件原始代码“学生学籍管理_单文件代码.cpp”;
2、多文件组织后的“学生学籍管理_多文件组织”工程文件夹。
/*
Forpersonaluseonlyinstudyandresearch;
notforcommercialuse
本程序应用了:
布尔类型格式化输入输出
cin.getline()引用作为函数参数
函数重载内存的动态分配
二进制文件结构体指针
构造函数析构函数
静态数据成员函数覆盖
纯虚函数抽象类
友元函数>
运算符重载
继承和多重继承异常处理
通过链表动态存储数据
多文件组织
等C++的特色功能
*/
#include<
iostream>
usingnamespacestd;
fstream>
stdlib.h>
structInfo
charnum[20];
//学号
charname[8];
//姓名
charphone[12];
//电话
charadres[40];
//住址
floatmark;
//绩点
charother[100];
//奖惩信息
charbook;
Info*next;
staticintN;
//记录信息的条数,静态变量
Stu:
Stu()
N=0;
person=newInfo;
//内存动态分配
people.open("
if(people.fail())
cout<
创建文件PeoInfo.txt出错!
\n"
;
exit(0);
~Stu()
people.close();
voidInputOne(Info*p1)//输入一个学生信息
\n请输入下面的数据!
学号:
cin.getline(p1->
num,20);
姓名:
name,8);
电话:
phone,12);
住址:
adres,40);
绩点:
cin>
p1->
mark;
//略过换行符
备注:
other,100);
学生证预约办理?
book;
N++;
voidShow:
ShowOne(Info*p)//显示指定的学生信息
=================================================\n\n"
<
p->
num<
endl;
name<
phone<
adres<
mark<
other<
学生证预约办理Y/N:
book<
=================================================\n"
voidStu:
Info*Show:
returnNULL;
Info*Manage:
ShowAll()//显示所有学生的信息
charagain;
fstreamshowAll;
\n\n***下面显示所有学生的信息***\n"
showAll.open("
in|ios:
if(showAll.fail())
打开文件PeoInfo.txt出错!
}
showAll.read((char*)person,sizeof(*person));
while(!
showAll.eof())
person->
\n请按回车键,显示下一条信息!
cin.get(again);
showAll.read((char*)person,sizeof(*person));
cout<
显示完毕!
showAll.close();
voidManage:
Apply(char*a)//开具学籍证明
p=SearNum(a);
COLOR2e"
fstreamapply;
apply.open("
Apply.txt"
out);
证明\n"
同学(学号:
p->
num<
),系我校在校学生。
特此证明。
\n\n"
南京航空航天大学\n\n"
endl<
已按上述格式保存到Apply.txt文件中!
apply<
apply.close();
Book(char*a)/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C 程序设计语言 C 程序设计语言课程设计报告学生学籍管理系统 程序设计语言 课程设计 报告 学生 学籍 管理 系统