资源描述
合肥学院
计算机科学与技术系
课程设计报告
2010~2011学年第二学期
课程
C++课程设计
课程设计名称
学生社团管理程序
学生姓名
章 丹
学号
1004013033
专业班级
计科(1)班
指导教师
华姗姗
2011年6月
一、 课程设计目的:
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度.通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++程序设计语言》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握结构化程序设计方法,熟悉面向对象程序设计方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
二、需求分析:
课程设计名称:学生社团管理程序
设计内容:编写一个简单的学生社团管理程序,帮助管理学生社团信息.要求具有学生信息管理和社团信息管理的功能。其中学生信息管理包括学生基本信息的录入、删除和修改等功能。社团信息管理包括社团信息的录入,查看,删除,修改等功能。
二 算法设计
1.设计思想:
学生社团管理程序(添加信息、修改信息、删除信息,查询信息,);
要完成这个题目,主要是建立解决输入的信息的存储,解决的方法是建立动态数组,用于存储信息.解决了这个问题后就是如何建立联系了,解决的方法是创建一个文件档用来储存输入的信息。
2.功能要求
在学生社团管理系统中须实现以下功能:
(1) 添加社员信息:能够社员的信息,添加信息如下图;
(2) 修改社员信息:能对学生社团管理系统中存储的信息进行修改;
(3) 删除社员信息:可以删除学生社团管理系统中所有社员的信息;
(4) 查询社员信息: 按照每个社员的会员号可以进行查询社员的情况;
(5) 存储信息:能够记录保存在设定的文件档中,以便使用;
(6) 退出系统:任务完成后,能够正常退出系统。
3。 技术要求
(1)学生信息管理包括学生基本信息的录入、删除和修改等功能。社团信息管理包括社团信息的录入,查看,删除,修改等功能。
(2)信息以文件档的形式存储,存储位置,文件名,文件格式由设计者确定。
(3)以菜单方式实现功能选择控制。
三. 学生社团管理程序的框图设计
1 总体实现功能
主要的数据结构:社员会员号、社员姓名,社员年龄,社员性别,社员专业,社员班级、社团名称。以这些数据来存储学生的信息,能够了解学生社团的各项情况。
下图给出了学生社团管理程序的功能结构:
社 员
选择
1、添加社员信息
2、修改社员信息
5、退出系统
4、查询社员信息
3、删除社员信息
社员会员号
社员姓名
社员年龄
社员性别
社员专业
社员班级
社团名称
(1) 添加信息模块
社员进入该模块,输入自己的相关信息,输入后,保存自己的信息,这样系统就存储了你的信息。
添加服务信息
社员会员号
社员姓名
社员性别
社员年龄
社员专业
社员班级
社团名称
存储信息
(2) 修改信息模块
社员进入该模块,输入自己的社员会员号,在进入自己的信息区域,修改自己的相关信息,再保存,即可。
输入要修改的社员会员号(正确)
社员会员号
社员姓名
社员性别
社员年龄
社员专业
社员班级
社团名称
存储信息
修改社员信息
(3)删除信息模块
社员进入模块,可以删除社员的所有信息,进行查看。
(4)查询信息模块
社员进入该模块,可以查询自己的信息情况.
输入要查询的社员的会员号(正确)
社员会员
社员姓名
社员年龄
社员性别
社员专业
社员班级
社团名称
查询社员信息
(5)退出系统
2、设计功能的实现和分析
(1)定义结构体
struct Message //构造学生信息结构体
{
string ID; //社团会员号
string name; //社员姓名
string sex; //社员性别
string age; ················· ` //社员年龄
string profession; //社员专业
string grade; //社员班级
string club; //社团名称
(2)学生信息类
class studentmessage
{
public
char Menu(); //菜单
void Add(); //添加社员信息
void Change(); //修改社员信息
void Delate(); //删除社员信息
void Search(); //查询社员信息
void Write(); //写入文件
void Read(); //从文件中读取
private:
vector<Message> mes;
static int times;
};
(3) 显示菜单函数
/////////////菜单////////////////////
char studentmessage::Menu()
{
cout<<endl;
cout<〈endl;
cout〈<endl;
cout〈<" 学生社团管理系统-——选项”<<endl;
cout<<"***********************************************"〈〈endl;
cout<〈endl;
cout〈〈" 1。添加社员信息"<<endl;
cout〈〈" 2。修改社员信息”〈<endl;
cout<<" 3.删除社员信息"<<endl;
cout〈〈” 4.查询社员信息"<<endl;
cout<〈" 5.退出程序"<〈endl;
char choose;
cin>>choose;
return choose;
}
(4) 函数的分析
〈1〉添加社员信息
//////////////录入////////////////////
void studentmessage::Add()
{
Read(); //从文件档中读取已存的信息
Message temp; //构建一个临时的temp
cout 〈<”请依次输入新社员的信息" 〈〈endl;
cout〈<"社员会员号:”<<endl;
cin 〉>temp。ID;
cout〈〈"社员姓名:"<<endl;
cin>>temp.name;
cout<<”社员性别:”〈〈endl;
cin〉>temp.sex;
cout〈〈”社员年龄:"<〈endl;
cin〉〉temp。age;
cout<〈"社员专业:"〈<endl;
cin>>temp.profession;
cout〈<”社员班级:"<<endl;
cin〉〉temp.grade;
cout〈<”社团名称:"<<endl;
cin>>temp。club;
mes。push_back(temp); //运用push_back把输入的新信息存储到文件档中
times++;
Write();
}
将原有文件档中的信息读取出来,然后将信息添加在其后,再一起存入文件档中。
<2〉修改社员信息
void studentmessage::Change()
{
{
Read(); //从文件档中读取已存的信息
string sign; //构建一个临时的sign
cout 〈<endl <<”输入要修改的社员信息的会员号: ”〈〈endl;
cin >>sign;
for(int i=0;i〈mes。size();i++) //利用for循环查找文件档中的已存入的会员号
{
if (mes[i].ID==sign)
{
cout <〈endl <<"你要修改的社员信息是: " 〈〈endl〈<endl;
cout<<”社员会员号:"〈<mes[i].ID〈〈endl;
cout<<”社员姓名:”<<mes[i]。name〈〈endl;
cout〈〈"社员性别 :”〈〈mes[i]。sex〈〈endl;
cout<<”社员年龄:”〈〈mes[i]。age<<endl;
cout<〈"社员专业:"〈<mes[i].profession<<endl;
cout〈〈"社员班级:"<〈mes[i]。grade〈〈endl;
cout〈<”社团名称:"〈<mes[i]。club〈〈endl;
cout〈〈endl;
cout<〈endl;
cout <<”请依次输入新教材的信息" <〈endl;
cout〈<"社员会员号:”<〈endl;
cin〉>mes[i]。ID;
cout<<"社员姓名:”〈〈endl;
cin >〉mes[i].name;
cout<〈”社员性别:"〈<endl;
cin〉>mes[i]。sex;
cout<<”社员年龄:"〈〈endl;
cin〉>mes[i]。age;
cout〈<”社员专业:”〈〈endl;
cin>>mes[i].profession;
cout<〈"社员班级:”<〈endl;
cin〉>mes[i].grade;
cout<〈"社团名称:"<〈endl;
cin>>mes[i].club;
Write();
break;
}
}
先将文件档中的信息读取出来,然输入自己需要修改的会员号,利用for循环查找文件档中是否存在该会员,如果不存在,则为空,跳出循环,结束程序,如果存在,先把信息显示出来,然后改写信息。
<4>查找社员信息
void studentmessage::Search()
{
Read(); //从文件档中读取已存的信息
string sign;
cout 〈〈endl <<”输入要查找的社员信息的会员号: ”<〈endl;
cin 〉>sign;
bool flog=false;
for(int i=0;i〈mes.size();i++) //利用for循环查找文件档中的已存入的会员号
{
if (mes[i].ID==sign)
{
cout〈<endl〈<"你要查找的教材信息是: ” 〈〈endl〈<endl;
cout<〈"社员会员号:"<<mes[i]。ID<〈endl;
cout<〈”社员姓名:”〈〈mes[i].name<<endl;
cout<<"社员性别 :”〈<mes[i]。sex〈<endl;
cout<<"社员年龄:”〈<mes[i]。age<〈endl;
cout〈〈"社员专业:"<〈mes[i].profession〈<endl;
cout<<"社员班级:"〈<mes[i]。grade〈<endl;
cout<〈"社团名称:"〈〈mes[i]。club〈<endl;
flog=true;
break;
}
}
if(flog==false) cout<<”noun”〈<endl;
}
}
先将文件档中的信息读取出来,然输入自己需要查找的会员号,利用for循环查找文件档中是否存在该会员,如果不存在,则为空,跳出循环,结束程序,如果存在,把该会员的信息显示出来。
〈5>
//////////////////写入//////////////////////
void studentmessage::Write()
{
ofstream os("clubmessage。txt",ios_base::out);
for(int i=0;i<mes.size();i++)
{
os〈<mes[i]。age〈<endl
<〈mes[i].club<〈endl
〈<mes[i].grade〈<endl
<<mes[i]。ID〈<endl
〈〈mes[i]。name〈<endl
<<mes[i].profession<〈endl
〈<mes[i]。sex<〈endl;
}
os.close();
}
创建一个clubmessage.txt用于储存社员信息。运用ofstream os将信息储存起来.
〈6>
//////////////////读取////////////////
void studentmessage::Read()
{
Message tempstudent;
ifstream is("clubmessage。txt”,ios_base::in);
while(!is。eof() //当字符长度部位空时运行下例读取文件档中的信息
{
is>〉tempstudent.age
>〉tempstudent。club
〉>tempstudent。grade
〉〉tempstudent.ID
〉>tempstudent.name
〉>tempstudent.profession
〉>tempstudent。sex;
mes.push_back(tempstudent);
times++;
}
}
上面已经创建一个clubmessage.txt用于储存社员信息。运用ifstream os将信息读取出来。
<7〉删除社员信息
void studentmessage::Delate()
{
Read();
string sign;
cout 〈〈endl 〈〈"输入要删除的社员信息的会员号: ”<〈endl;
cin >〉sign;
int i;
string signstr;
for(i=0;i<mes。size();i++)
{
if (mes[i].ID==sign)
{
cout<<endl〈<”你要删除的社员信息是: ” 〈〈endl<<endl;
cout<〈"社员会员号:"<<mes[i]。ID〈〈endl;
cout〈〈"社员姓名:"<〈mes[i]。name<〈endl;
cout<<”性别 :"<<mes[i].sex〈〈endl;
cout〈〈"年龄:”〈〈mes[i]。age<<endl;
cout〈〈”专业:”<〈mes[i].profession<〈endl;
cout〈〈”班级:"〈<mes[i].grade〈<endl;
cout<<”社团名称:"<〈mes[i].club〈〈endl;
cout〈〈”y/n?”〈〈endl;
cin>>signstr;
if(signstr=="y"||signstr==”Y") mes.erase(&mes[i]);
Write();
break;
}
}
先将文件档中的信息读取出来,然输入自己需要删除的会员号,利用for循环查找文件档中是否存在该会员,如果不存在,则为空,跳出循环,结束程序,如果存在,确定删除按“y”,把该会员的信息删除.
<8〉主函数
int main()
{
studentmessage student;
while(1)
{
switch(student.Menu())//运用switch产生循环操作.
{
case ’1’:student。Add(); break;
case '2':student。Change(); break;
case '3’:student。Delate(); break;
case ’4':student。Search(); break;
case '5':exit(0);
default:cout〈<”输入有误”<<endl;break;
}
}
return 0;
}
四、 用户手册
首先根据你在菜单中选择的类型进入,输入会员号,找到相对应的信息。然后根据显示的提示依次进行输入。用户利用该系统时可根据该利用手册进行运用。
五、 调试及测试
出现问题:
在修改信息函数中,开始并不能将原有信息进行修改,只能覆盖掉第一个会员信息,而且并没有把修改之前的信息删除,显示时同时显示了修改前后的信息;文件操作时不知道如何将输入的信息进行保存,怎样取出文件的信息,不能很好的运用文件操作;题目提示的运用链表不会用,数组类模版不会用。
解决问题:
通过问同学,查书籍,上网查看,了解可以创建一个文件档来解决问题,能够很好的存储信息在文件档中,将信息取出,调用等;文件的操作我利用一个函数编写保存信息的函数,每次输入一个客户的信息就进行保存.
数据用一个动态数组分配一定的内存存储服务信息在文件档中;
设计本程序了解到类和对象、动态数组、创建文档等知识的用途,学到了新的知识点,也看到了自己的不足,要学好自己的专业课程看来不是那样的简单,在学习阶段并没有写过这样大的程序,开始有些手忙脚乱的,所以说还是要多多看看这的程序,试着写写,提高自己的编程能力。
六、 小结
这次基础强化训练的课程设计对于我们来说,有一定的难度。因为他要求我们较完整的去实现一个比较可行的程序。将其应用到实际的生活中去.我被分配到的题目是售后服务管理系统的实现与设计。这个题目相对来说贴近生活,比较容易理解。但是设计一个较为完整的程序却不是这么简单的.
首先我分析了相关的题目内容,并由此而进行了相关资料和书籍的查询工作然后才开始正式进行设计。一开始不知从何下手但后来分析了一下题目,并结合这学期所学的知识,再加上相关提示我决定用类和对象、对象指针和文件的内容来编写程序。服务管理主要就是有一些操作来完成,这些操作包括:添加社员信息,修改社员信息,删除社员信息,查询社员信息,等等。用C++的知识来实现函数:添加,查询,修改,删除。最后编写退出系统的函数。
在具体编写程序时考虑只要编写前三个函数,后面的函数几乎差不多。添加社员信息:考虑到社员的信息较多,所以用类对其定义。又考虑到信息量大,所以添加后要保存到文件中去。信息查询:用构建文件档来写.修改信息:把保存到文件中的内容写到文件档中去,把其读取出来,再进行修改,再保存。
同时通过这几天的程序及报告编写,我也发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还是比较脆弱。尤其是编写大型的程序所要拥有的知识和技能比较缺乏。程序编好了,还要经过调试和修改,这步也很关键,好的程序是经过了无数次的修改和调试才产生的.我的程序基本上能够满足要求,但还有一些地方需要改进,在今后我应该在多看书的同时还要加强实践的练习。才能进一步提高自己的编程能力。
最后,还要感谢我们实验室指导老师的细心指导、热心帮助。路漫漫其修远兮,虽然本学期数据结构课程结束了,但仍觉得自己还有很多东西要学,我会在自己在以后的学习生活中不断努力、不断提高,争取更大的进步。
七、参考文献
[1] 闵联营,何克右.《C++程序设计教程》。武汉理工大学出版社;
[2] 严蔚敏,吴伟民。《数据结构(C语言版)》。清华大学出版社;
[3] 张文祥, 肖四友。《C++实验与案例分析》。 科学出版社;
[4] 谭浩强。《C++程序设计》. 清华大学出版社;
[5] 朱战立。《数据结构(C++语言描述)》(第二版本).高等教育出版社.
附录1
#include<iostream>
#include<stdlib。h〉
#include〈fstream〉
#include<string〉
#include<vector〉
using namespace std;
struct Message
{
string ID; //社员姓名
string sex; //社员性别
string age; //社员年龄
string profession; // 社员专业
string grade; //社员班级
string club; //社团名称
};
class studentmessage
{
public:
char Menu(); //菜单
void Add(); //添加社员信息
void Change(); //修改社员信息
void Delate(); //删除社员信息
void Search(); //查询社员信息
void Write(); //写入文件
void Read(); //从文件中读取
private:
vector〈Message〉 mes;
static int times;
};
int studentmessage::times=0;
/////////////菜单////////////////////
char studentmessage::Menu()
{
cout<<endl;
cout<〈endl;
cout〈<endl;
cout<<” 学生社团管理系统-—-选项”〈〈endl;
cout〈〈"***********************************************"<<endl;
cout〈〈endl;
cout〈<” 1。添加社员信息”〈<endl;
cout<<” 2。修改社员信息”〈〈endl;
cout<<” 3。删除社员信息”<〈endl;
cout〈<" 4。查询社员信息"〈〈endl;
cout〈<” 5。退出程序”<〈endl;
char choose;
cin>>choose;
return choose;
}
//////////////录入////////////////////
void studentmessage::Add()
{
Read();
Message temp;
cout 〈<”请依次输入新社员的信息" 〈<endl;
cout<〈”社员会员号:"<〈endl;
cin 〉>temp。ID;
cout〈〈"社员姓名:”〈<endl;
cin〉〉temp.name;
cout<<”社员性别:"<〈endl;
cin>〉temp.sex;
cout〈〈”社员年龄:"〈<endl;
cin>〉temp.age;
cout〈〈”社员专业:”〈<endl;
cin>〉temp。profession;
cout〈〈"社员班级:"<〈endl;
cin〉〉temp。grade;
cout〈〈”社团名称:”<〈endl;
cin>>temp.club;
mes。push_back(temp);
times++;
Write();
}
void studentmessage::Change()
{
{
Read();
string sign;
cout <〈endl 〈<”输入要修改的社员信息的会员号: "〈〈endl;
cin >>sign;
for(int i=0;i〈mes.size();i++)
{
if (mes[i]。ID==sign)
{
cout <<endl 〈<"你要修改的社员信息是: ” 〈〈endl〈〈endl;
cout〈<”社员会员号:"<〈mes[i]。ID<<endl;
cout<〈”社员姓名:"<〈mes[i]。name<<endl;
cout<〈”社员性别 :"<〈mes[i]。sex<<endl;
cout〈〈”社员年龄:”<〈mes[i]。age<<endl;
cout〈〈"社员专业:"〈〈mes[i]。profession<〈endl;
cout〈〈”社员班级:”〈<mes[i]。grade〈<endl;
cout<<”社团名称:”〈<mes[i].club<〈endl;
cout〈<endl;
cout<<endl;
cout <〈”请依次输入新教材的信息” <<endl;
cout<〈”社员会员号:"〈<endl;
cin〉〉mes[i].ID;
cout〈〈”社员姓名:”<〈endl;
cin 〉>mes[i]。name;
cout<<"社员性别:”<<endl;
cin>>mes[i].sex;
cout〈<"社员年龄:”<<endl;
cin〉〉mes[i].age;
cout〈<"社员专业:"〈〈endl;
cin>>mes[i].profession;
cout〈〈"社员班级:"〈〈endl;
cin〉>mes[i]。grade;
cout<〈"社团名称:”〈〈endl;
cin>>mes[i]。club;
Write();
break;
}
}
}
void studentmessage::Search()
{
{
Read();
string sign;
cout 〈〈endl <<”输入要查找的社员信息的会员号: ”<〈endl;
cin >〉sign;
bool flog=false;
for(int i=0;i〈mes.size();i++)
{
if (mes[i].ID==sign)
{
cout〈<endl〈<”你要查找的教材信息是: " 〈〈endl<<endl;
cout<<"社员会员号:"〈<mes[i]。ID〈<endl;
cout〈<"社员姓名:"〈<mes[i].name<〈endl;
cout〈<”社员性别 :”〈<mes[i]。sex<〈endl;
cout<〈"社员年龄:"〈〈mes[i]。age〈<endl;
cout<〈"社员专业:"〈<mes[i].profession<<endl;
cout<<"社员班级:”〈〈mes[i]。grade〈<endl;
cout〈〈”社团名称:”〈〈mes[i]。club<〈endl;
flog=true;
break;
}
}
if(flog==false) cout<<”noun"〈〈endl;
}
}
//////////////////写入//////////////////////
void studentmessage::Write()
{
ofstream os("clubmessage。txt",ios_base::out);
for(int i=0;i<mes。size();i++)
{
os〈〈mes[i]。age〈<endl
<<mes[i]。club<<endl
〈<mes[i]。grade<〈endl
<〈mes[i]。ID〈<endl
<〈mes[i]。name<〈endl
<〈mes[i]。profession〈<endl
<<mes[i].sex<〈endl;
}
os。close();
}
//////////////////读取////////////////
void studentmessage::Read()
{
Message tempstudent;
ifstream is("clubmessage。txt",ios_base::in);
while(!is。eof())
{
is〉>tempstudent.age
〉〉tempstudent。club
>>tempstudent.grade
〉〉tempstudent。ID
〉〉tempstudent。name
〉>tempstudent.profession
>〉tempstudent.sex;
mes。push_back(tempstudent);
times++;
}
}
void studentmessage::Delate()
{
Read();
string sign;
cout 〈〈endl <<”输入要删除的社员信息的会员号: "<〈endl;
cin >>sign;
int i;
string signstr;
for(i=0;i〈mes.size();i++)
{
if (mes[i]。ID==sign))
{
cout〈<endl〈〈"你要删除的社员信息是: ” <<endl〈<endl;
cout〈<”社员会员号:"〈〈mes[i].ID〈<endl;
cout<<”社员姓名 :”〈〈mes[i].name〈〈endl;
cout〈〈"社员性别 :”〈<mes[i].sex<<endl;
cout<〈”社员年龄 :”<<mes[i]。age<〈endl;
cout〈〈"社员专业 :”<<mes[i].profession<<endl;
cout<<”社员班级 :”<〈mes[i]。grade〈〈endl;
cout<〈”社团名称 :”〈<mes[i]。club〈〈endl;
cout〈<"y/n?"〈〈endl;
cin〉>signstr;
if(signstr==”y”||signstr==”Y”) mes.erase(&mes[i]);
Write();
break;
}
}
int main()
{
studentmessage student;
while(1)
{
switch(student.Menu()
{
case '1’:student.Add(); break;
case ’2':student。Change(); break;
case ’3’:student。Delate(); break;
case '4':student.Search(); break;
case '5':exit(0);
default:cout〈〈”输入有误”<〈endl;break;
}
}
return 0;
}
}
附录2:
1.本系
展开阅读全文