《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx

上传人:b****5 文档编号:19008497 上传时间:2023-01-03 格式:DOCX 页数:23 大小:99.09KB
下载 相关 举报
《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx_第1页
第1页 / 共23页
《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx_第2页
第2页 / 共23页
《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx_第3页
第3页 / 共23页
《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx_第4页
第4页 / 共23页
《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx

《《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。

《C程序设计语言》课程设计报告学生学籍管理系统Word格式文档下载.docx

记录指定学生的奖惩信息记录

按学号排序后输出

按学号排序后输出到屏幕,并保存到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)/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1