公交卡信息管理系统大学论文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计(论文)
程序设计实训
课程名称
公交卡信息管理系统
题目
信息与控制工程学院
院(系)
软件1402
专业班级
姓名
学号
指导教师
年月日
目录
1. 题目 (2)
2. 需求分析 (2)
2.1功能分析 (2)
3.概要设计 (3)
4. 详细设计 (5)
4.1、程序流程图 (5)
4.2、loading()函数实现用链表读取文件中数据 (6)
4.3、display()函数显示所用用户信息 (8)
5. 实现与测试 (9)
5.1管理员及用户登录界面 (9)
5.2管理员操作界面 (9)
5.3显示所有用户信息 (9)
6.总结 (10)
第 1 页
第 2 页
1.题目
公交卡模拟系统
2.需求分析
2.1功能分析
系统需要满足管理员和持卡用户两类使用者,管理员能实现对数据的添加、删除、查找、修改、显示全部用户五项功能。
持卡用户可以实现对数据的添加、查找功能。
添加用户
删除用户 查找用户
修改用户信息
显示全部用户e
管理员
公交卡模拟系统
用 户
3.概要设计
3.1类的设计
1)管理员类及持卡者类
管理者类:可实现对数据的添加、删除、查找、修改、显示操作
class administrator
public:
administrator();
void menu();
void add();
void Delete();
void search();
void modify();
void display();
持卡者类(用户类):实现数据的添加和查找操作。
class user
public:
user();
void menu();
void add();
void search();
2)公交卡分为三类一般卡、老年卡和学生卡
一般卡:包含可执行多个操作的成员函数及卡号和余额两个数据成员
class adult_card
public:
virtual void add();
virtual int Delete(char *p);
virtual int search(char *p);
virtual int modify(char *p);
第 3 页
virtual void display();
adult_card *loading()
double balance;
char card_number[10];
adult_card *next;
老年卡:使用public继承adult_card类并新增姓名、优待证证件号
class seniors_card:public adult_card
public:
virtual void add();
virtual int Delete(char *p);
virtual int search(char *p);
virtual int modify(char *p);
virtual void display();
seniors_card *loading()
char name[20];
char discount_number[10];
seniors_card *next;
学生卡:使用public继承adult_card类并新增姓名、学生证证件号
class student_card:public adult_card
public:
virtual void add();
virtual int Delete(char *p);
virtual int search(char *p);
virtual int modify(char *p);
virtual void display();
student_card *loading()
char name[20];
char student_number[10];
student_card *next;
第 4 页
4.详细设计
4.1、程序流程图
第 5 页
Y N
开始
输入账户、密码登录类型选择
管理员(admin)用户(user)
定义int变量账号:number
Int变量密码:passward
账号密码是否
正确
功能选择
新增用户查找
用户
删除
用户
修改
用户
显示
全部
用户
查找
用户
结束
第 6 页
第 7 页
4.2、loading()函数实现用链表读取文件中数据
adult_card *loading() //loading()函数从文件中载入数据到链表 { adult_card *head, *p1;
head = p1 = new adult_card
while (!in.eof()) //使用eof()函数判断是否到文件末尾 { in >> p1->card_number >> p1->balance;
if (p1->card_number[0] == '\0')break ;
p1->next = new adult_card ; p1 = p1->next;
}
N
Y
新建两个adult_card 类的指针head 、p1
将从文件中读取到的值赋给p1->card_number 和p1->balance ;新
建adult_card 赋给p1->next
开 始
创建adult_card 类的指针*head 、*p1
打开adult.txt 文件 文件中数据传给P1->number 和p1->balance
是否到达文件末尾
结 束 返回值head
p1=p1->next
p1->next=new adult_card
第 8 页
4.3、display()函数显示所用用户信息
void adult_card ::display() { adult_card *p1=loading(); //调用loading()函数义链表形式从文件中读取数据 while (p1->next != NULL ) { cout << "卡号:" << p1->card_number<<"\t"<< "余额:" << p1->balance; cout << endl << endl; p1 = p1->next;
}
Y N
While 语句与链表实现数据
的遍历,并输出所有用户信开 始
新建adult_card 类的指针*p
调用loading()函数(返回值为adult_card 类的指针)将返回值赋给p
p1->number 和p1->balance 输出到显示器
判断是否到达链表末尾
结 束 p1=p1->next
5.实现与测试
5.1管理员及用户登录界面
5.2管理员操作界面
5.3显示所有用户信息
第9 页
第 10 页
6.总结
参考资料和程序示例,通过链表的使用和文件的输入输出我感受到了自己亲自动手编程序、调程序的重要性,我们要熟悉C++的语法、体会调试的思想,最好的一个手段就是自己动手编程、调试,这会比我们一味的看书效果好得多。
另外,对于学C++的我们来说,对类相关知识的掌握也尤为重要。
在这次课程设计中,通过各个函数实现及文件读取方式,更进一步加深了我们对基础知识的认识。
通过这一次课程设计,我们最大的收获就是分析问题解决问题能力的有了大幅提高。
但仍存在许多不足,不能独自写出功能很齐全的代码,写代码要参
考很多资料,所以今后应培养自己独立写代码的能力。
在今后学习中,必须精通
至少一门编程语言,并且日后的课程也要认真学习,不断的用知识武装自己的头脑,为以后的学习打一个坚定的基础。
FileTest 类
-headhousinginfo:HousingInfo -temphousinginfo1:HousingInfo
+ReadFile():void
+AppendtoFile(HousingInfo housinginfo):void
+OverrideFile(HousingInfo housinginfo):void
图3.2文件操作FileTest 类
公交卡信息管理系统源码
//注意:程序涉及到文件读写,必须提前在相应工程目录新建adult.txt;seniors.txt;student.txt三个txt文件
# include<iostream>
# include<fstream>
# include<string>
using namespace std;
class adult_card
{
public:
virtual void add();
virtual int Delete(char *p);
virtual int search(char *p);
virtual int modify(char *p);
virtual void display();
adult_card *loading() //loading()函数从文件中载入数据到链表{
adult_card *head, *p1;
head = p1 = new adult_card;
ifstream in;
in.open("adult.txt", ios::in); //打开目标文件
if (!in)
{
cerr << "open error!" << endl;
abort();
}
while (!in.eof()) //利用循环实现链表对数据的连续载入
{
in >> p1->card_number >> p1->balance;
if (p1->card_number[0] == '\0')break;
p1->next = new adult_card;
p1 = p1->next;
}
第11 页
in.close(); //关闭目标文件
return head; //返回值为类的指针
};
double balance;
char card_number[10];
adult_card *next;
};
void adult_card::add()
{
balance = 0;
system("cls");
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << "请输入新添加的卡号:";
cin >> card_number;
fstream out("adult.txt", ios::app);
out << card_number<<"\t"<<balance<<'\n';
out.close();
cout << "余额:0.00" << endl;
};
int adult_card::Delete(char *p)
{
adult_card *head, *p1, *p2;
head = p1 = p2 =loading();
while (p1->next != NULL)
{
if (strcmp(p1->card_number, p) == 0)
{
char ch;
cout << "!确认删除?";
cin >> ch;
if (ch == 'y' || ch == 'Y')
{
p2->next = p1->next;
}
第12 页
p1 = head;
remove("adult.txt");
ofstream out;
out.open("adult.txt");
if (!out)
{
cerr << "open error!" << endl;
abort();
}
while (p1->next != NULL)
{
out << p1->card_number << "\t" << p1->balance << '\n';
p1 = p1->next;
}
out.close();
return 1;
}
p2 = p1;
p1 = p1->next;
}
return 0;
};
int adult_card::search(char *p)
{
adult_card *p1 = loading();
while (p1->next!=NULL)
{
if (strcmp(p1->card_number, p)==0)
{
cout << "卡号:" << p1->card_number << "\t" << "余额:" << p1->balance;
cout << endl << endl; return 1;
}
p1 = p1->next;
第13 页
}
return 0;
};
int adult_card::modify(char *p)
{
adult_card *head, *p1;
head = p1 = loading();
while (p1->next != NULL)
{
if (strcmp(p1->card_number, p) == 0)
{
cout << "请输入修改后的余额:";
cin >> p1->balance;
p1 = head;
remove("adult.txt");
ofstream out;
out.open("adult.txt");
if (!out)
{
cerr << "open error!" << endl;
abort();
}
while (p1->next != NULL)
{
out << p1->card_number << "\t" << p1->balance << '\n';
p1 = p1->next;
}
out.close();
return 1;
}
p1 = p1->next;
}
return 0;
};
第14 页
void adult_card::display()
{
adult_card *p1=loading();
while (p1->next != NULL)
{
cout << "卡号:" << p1->card_number<<"\t"<< "余额:" << p1->balance;
cout << endl << endl;
p1 = p1->next;
}
};
class seniors_card:public adult_card
{
public:
virtual void add();
virtual int Delete(char *p);
virtual int search(char *p);
virtual int modify(char *p);
virtual void display();
seniors_card *loading()
{
seniors_card *head, *p1;
head = p1 = new seniors_card;
ifstream in;
in.open("seniors.txt", ios::in);
if (!in)
{
cerr << "open error!" << endl;
abort();
}
while (!in.eof())
{
in >> p1->card_number >> p1->name >> p1->discount_number >> p1->balance;
if (p1->card_number[0] == '\0')break;
第15 页
p1->next = new seniors_card;
p1 = p1->next;
}
in.close();
return head;
};
char name[20];
char discount_number[10];
seniors_card *next;
};
void seniors_card::add()
{
balance = 0;
system("cls");
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << "请输入新添加的卡号:";
cin >> card_number;
cout << "请输入持卡人姓名:";
cin >> name;
cout << "请输入持卡人老年优待证号码:";
cin >> discount_number;
fstream out("seniors.txt", ios::app);
out << card_number << "\t"<< name << "\t"<< discount_number << "\t"<< balance << '\n';
out.close();
cout << "余额:0.00" << endl;
};
int seniors_card::Delete(char *p)
{
seniors_card *head, *p1, *p2;
head = p1 = p2 = loading();
while (p1->next != NULL)
{
if (strcmp(p1->card_number, p) == 0)
{
第16 页
char ch;
cout << "!确认删除?";
cin >> ch;
if (ch == 'y' || ch == 'Y')
{
p2->next = p1->next;
}
p1 = head;
remove("adult.txt");
ofstream out;
out.open("adult.txt");
if (!out)
{
cerr << "open error!" << endl;
abort();
}
while (p1->next != NULL)
{
out << p1->card_number << "\t" << p1->name << "\t" << p1->discount_number << "\t" << p1->balance << '\n';
p1 = p1->next;
}
out.close();
return 1;
}
p2 = p1;
p1 = p1->next;
}
return 0;
};
int seniors_card::search(char *p)
{
seniors_card *p1=loading();
while (p1->next != NULL)
第17 页
{
if (strcmp(p1->card_number, p) == 0)
{
cout << "卡号:" << p1->card_number << "\t";
cout << "姓名:" << p1->name << "\t";
cout << "老年优待证号码:" << p1->discount_number << "\t";
cout << "余额:" << p1->balance << "\t";
cout << endl << endl;
return 1;
}
p1 = p1->next;
}
return 0;
};
int seniors_card::modify(char *p)
{
seniors_card *head, *p1;
head = p1 = loading();
while (p1->next != NULL)
{
if (strcmp(p1->card_number, p) == 0)
{
cout << "请输入修改后的姓名";
cin >> p1->name;
cout << "请输入修改后的优待卡号";
cin >> p1->discount_number;
cout << "请输入修改后的余额:";
cin >> p1->balance;
p1 = head;
remove("seniors.txt ");
ofstream out;
out.open("seniors.txt");
if (!out)
{
第18 页
cerr << "open error!" << endl;
abort();
}
while (p1->next != NULL)
{
out << p1->card_number << "\t" << p1->name << "\t" << p1->discount_number << "\t" << p1->balance << '\n';
p1 = p1->next;
}
out.close();
return 1;
}
p1 = p1->next;
}
return 0;
};
//董老师说:“13级的都说我很慈祥”哈哈哈
//朱老师很严厉哈哈哈;
void seniors_card::display()
{
seniors_card *p1 = loading();
while (p1->next != NULL)
{
cout << "卡号:" << p1->card_number << "\t";
cout << "姓名:" << p1->name << "\t";
cout << "老年优待证号码:" << p1->discount_number << "\t";
cout << "余额:" << p1->balance << "\t";
cout << endl << endl;
p1 = p1->next;
}
};
class student_card:public adult_card
{
第19 页
public:
virtual void add();
virtual int Delete(char *p);
virtual int search(char *p);
virtual int modify(char *p);
virtual void display();
student_card *loading()
{
student_card *head, *p1;
head = p1 = new student_card;
ifstream in;
in.open("student.txt", ios::in);
if (!in)
{
cerr << "open error!" << endl;
abort();
}
while (!in.eof())
{
in >> p1->card_number >> p1->name >> p1->student_number >> p1->balance;
if (p1->card_number[0] == '\0')break;
p1->next = new student_card;
p1 = p1->next;
}
in.close();
return head;
};
char name[20];
char student_number[10];
student_card *next;
};
void student_card::add()
{
balance = 0;
第20 页
system("cls");
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << "请输入新添加的卡号:";
cin >> card_number;
cout << "请输入持卡人姓名:";
cin >> name;
cout << "请输入持卡人学生证证号码:";
cin >> student_number;
fstream out("student.txt", ios::app);
out << card_number << "\t" << name << "\t" << student_number << "\t" << balance << '\n';
out.close();
cout << "余额:0.00" << endl;
};
int student_card::Delete(char *p)
{
student_card *head, *p1, *p2;
head = p1 = p2 = loading();
while (p1->next != NULL)
{
if (strcmp(p1->card_number, p) == 0)
{
char ch;
cout << "!确认删除?";
cin >> ch;
if (ch == 'y' || ch == 'Y')
{
p2->next = p1->next;
}
p1 = head;
remove("adult.txt");
ofstream out;
out.open("adult.txt");
if (!out)
{
第21 页
cerr << "open error!" << endl;
abort();
}
while (p1->next != NULL)
{
out << p1->card_number << "\t" << p1->name << "\t" << p1->student_number << "\t" << p1->balance << '\n';
p1 = p1->next;
}
out.close();
return 1;
}
p2 = p1;
p1 = p1->next;
}
return 0;
};
int student_card::search(char *p)
{
student_card *p1 = loading();
while (p1->next != NULL)
{
if (strcmp(p1->card_number, p) == 0)
{
cout << "卡号:" << p1->card_number << "\t";
cout << "姓名:" << p1->name << "\t";
cout << "学生证号码:" << p1->student_number << "\t";
cout << "余额:" << p1->balance << "\t";
cout << endl << endl;
return 1;
}
p1 = p1->next;
}
return 0;
第22 页
};
int student_card::modify(char *p)
{
student_card *head, *p1;
head = p1 = loading();
while (p1->next != NULL)
{
if (strcmp(p1->card_number, p) == 0)
{
cout << "请输入修改后的姓名:";
cin >> p1->name;
cout << "请输入修改后的学生证号:";
cin >> p1->student_number;
cout << "请输入修改后的余额:";
cin >> p1->balance;
p1 = head;
remove("student.txt");
ofstream out;
out.open("student.txt");
if (!out)
{
cerr << "open error!" << endl;
abort();
}
while (p1->next != NULL)
{
out << p1->card_number << "\t" << p1->name << "\t" << p1->student_number << "\t" << p1->balance << '\n';
p1 = p1->next;
}
out.close();
return 1;
}
p1 = p1->next;
第23 页
}
return 0;
};
void student_card::display()
{
student_card *p1=loading();
while (p1->next != NULL)
{
cout << "卡号:" << p1->card_number<<"\t";
cout << "姓名:" << p1->name << "\t";
cout << "学生证号码:" << p1->student_number << "\t";
cout << "余额:" << p1->balance << "\t";
cout << endl << endl;
p1 = p1->next;
}
};
void password()
{
int administrator_number, administrator_password;
system("cls");
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << " 请输入管理员账号:";
cin >> administrator_number;
while (administrator_number != 123)
{
system("cls");
cout << "*******************欢迎使用西安公交卡信息管理系统*******************" << endl;
cout << "*** !账号不存在 ***"<< endl;
cout << "*** 请重新输入管理员账号: ***"<< endl;
cin >> administrator_number;
第24 页
}
cout << " 请输入管理员密码:";
cin >> administrator_password;
while (administrator_password != 123)
{
cout << "*** !管理员密码错误 ***"<< endl;
cout << "*** 请重新输入管理员密码: ***"<< endl;
cin >> administrator_password;
}
};
class administrator
{
public:
administrator();
void menu();
void add();
void Delete();
void search();
void modify();
void display();
};
administrator::administrator()
{
password();
menu();
};
void administrator::menu()
{
char m;
system("cls");
第25 页
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << "*** 请选择您需要的操作: ***"<< endl;
cout << "*** 1.添加用户信息 ***"<< endl;
cout << "*** 2.删除用户信息 ***"<< endl;
cout << "*** 3.查找用户信息 ***"<< endl;
cout << "*** 4.修改用户信息 ***"<< endl;
cout << "*** 5.显示全部用户 ***"<< endl;
cout << "*** 6.退出 ***"<< endl;
cout << "请选择:";
cin >> m;
while (m != '1'&&m != '2'&&m != '3'&&m != '4'&&m != '5'&&m != '6'&&m != '7')
{
cout << "输入错误:";
cout << "请重新选择:";
cin >> m;
}
switch (m)
{
case'1':add(); break;
case'2':Delete(); break;
case'3':search(); break;
case'4':modify(); break;
case'5':display(); break;
case'6':exit(0); break;
}
};
void administrator::add()
{
int o;
system("cls");
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << "*** 请选择需要添加的用户类型: ***"<< endl;
cout << "*** 1.普通用户 ***"<< endl;
第26 页
cout << "*** 2.老年卡用户 ***"<< endl;
cout << "*** 3.学生卡用户 ***"<< endl;
cout << "请选择:";
cin >> o;
if (o == 1)
{
adult_card Adult;
Adult.add();
}
else if (o == 2)
{
seniors_card Seniors;
Seniors.add();
}
else if (o == 3)
{
student_card Student;
Student.add();
}
cout << "添加成功" << endl;
system("PAUSE");
menu();
};
void administrator::Delete()
{
char card_number[10];
system("cls");
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << " 请输入您要删除的公交卡卡号:";
cin >> card_number;
adult_card Adult;
seniors_card Seniors;
student_card Student;
if (Adult.Delete(card_number) == 0 && Seniors.Delete(card_number) == 0 &&
第27 页
Student.Delete(card_number) == 0)
cout << "!无法查到该卡信息" << endl;
system("PAUSE");
menu();
};
void administrator::search()
{
char card_number[10];
system("cls");
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << " 请输入您要查询的公交卡卡号:";
cin >> card_number;
adult_card Adult;
seniors_card Seniors;
student_card Student;
if (Adult.search(card_number) == 0 && Seniors.search(card_number) == 0 &&
Student.search(card_number) == 0)
{
cout << "!无法查到该卡信息" << endl;
}
system("PAUSE");
menu();
};
void administrator::modify()
{
char card_number[10];
system("cls");
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << " 请输入您要修改的公交卡卡号:";
cin >> card_number;
adult_card Adult;
seniors_card Seniors;
student_card Student;
第28 页
if (Adult.modify(card_number) == 0 && Seniors.modify(card_number) == 0 &&
Student.modify(card_number) == 0)
cout << "!无法查到该卡信息" << endl;
system("PAUSE");
menu();
};
void administrator::display()
{
system("cls");
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << "*** 所有用户信息: ***"<< endl;
adult_card Adult;
seniors_card Seniors;
student_card Student;
Adult.display();
Seniors.display();
Student.display();
cout << "输出完毕!";
system("PAUSE");
menu();
};
class user
{
public:
user();
void menu();
void add();
void search();
};
user::user()
{
menu();
第29 页
};
void user::menu()
{
char m;
system("cls");
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << "*** 请选择您需要的操作: ***"<< endl;
cout << "*** 1.添加用户信息 ***"<< endl;
cout << "*** 2.查找用户信息 ***"<< endl;
cout << "*** 3.退出 ***" << endl;
do
{
cout << "请选择:";
cin >> m;
} while (m != '1' && m != '2'&&m!='3');
switch (m)
{
case'1':add(); break;
case'2':search(); break;
case'3':exit(0); break;
}
};
void user::add()
{
int o;
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << "*** 请选择需要添加的用户类型: ***"<< endl;
cout << "*** 1.普通用户 ***"<< endl;
cout << "*** 2.老年卡用户 ***"<< endl;
cout << "*** 3.学生卡用户 ***"<< endl;
cout << "请选择:";
cin >> o;
if (o == 1)
第30 页
{
adult_card Adult;
Adult.add();
}
else if (o == 2)
{
seniors_card Seniors;
Seniors.add();
}
else if (o == 3)
{
student_card Student;
Student.add();
}
cout << "添加成功" << endl;
};
void user::search()
{
char card_number[10];
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << " 请输入您要查询的公交卡卡号:";
cin >> card_number;
adult_card Adult;
seniors_card Seniors;
student_card Student;
if (Adult.search(card_number) == 0 && Seniors.search(card_number) == 0 &&
Student.search(card_number) == 0)
{
cout << "!无法查到该卡信息" << endl;
}
};
void main()
第31 页
{
char n;
cout << "" << endl;
cout << "" << endl;
cout << "*******************欢迎使用西安公交卡信息管理系统*******************"<< endl;
cout << "*** (管理员登陆请选择 1 / 非管理员请选择 2) ***"<< endl;
cout << "*** 1.管理员登陆 ***"<< endl;
cout << "*** 2.非管理员登陆 ***"<< endl;
do
{
cout << "请选择:";
cin >> n;
}
while (n!='1'&&n!='2');
if (n=='1')
administrator A;
else
user B;
system("PAUSE");
}
第32 页
学长只能帮你到这了,其他的自己解决吧!
第33 页。