大一的课程设计基本上除了计算器,就是各种管理系统。(大概吧)

感觉看到题目整个一年的c++好像没学明白似的。基础知识掌握还算可以,真刀真枪的打代码,而且是实现这么些功能,做成一个管理系统,就真正感觉到了自己的弱小和菜。

学了一年的基础知识,突然上来要做一个管理系统,在期末考试和课设的双重重压下,我选择了期末考试,放弃了自主实现课设,选择借鉴上一级的代码,我不知道我这么做可耻不可耻,不过是挺窝囊的。能怎么办呢?唉。为什么要和期末考试安排到一起呢?真正自己做的人,反正你们都比我优秀,我就是个弟弟。唉。第二次叹气。

我拿到了学生管理系统的代码,把每一段都读懂了,然后稍作修改,改成了行政区划管理系统。(描述这一段的时候我的内心是羞愧的。)

暑假这段时间,我会继续学习Java。(上个寒假一直在学。)这个暑假也就是学习加复习,然后我争取利用Java来自己实现一些东西,当然这都是后话了。

我本来就是想把重点放在Java上的,不过学校的安排就是我们大一的课程就是c++,没有办法,有完整一大段的空闲时间只有在假期了。

下面就是我改过之后的代码。把它公开的原因也是因为它本就不属于我,我很羞愧。

分为三个cpp文件,两个头文件。

district.cpp

 //录入信息
#include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
#include"district.h"
using namespace std;
void district::input()
{
cout << "按提示输入:" << endl;
cout << "请输入行政区名: ";
cin >> name;
cout << "请输入人口(万人): ";
cin >> count;
cout << "请输入土地(平方千米): ";
cin >> area;
cout << "请输入邮编: ";
cin >> postcode;
return;
}
void district::input(ifstream & is)
{
is >> name >> count >> area >> postcode ;
is.get(); // get是什么函数
}
//显示信息
void district::output()
{
cout << "行政区基本信息如下:" << endl;
cout
<< " 行政区名:" << name
<< " 人口(万人):" << count
<< " 土地面积(平方千米):" << area
<< " 邮编:" << postcode
<< endl << endl;
}
void district::output(ofstream & os)
{
os
<< setw() << name
<< setw() << count
<< setw() << area
<< setw() <<postcode
<< endl;
}

districtmanage.cpp

 #include<iostream>
#include<string>
#include<fstream>
#include<iomanip>
#include"district.h"
#include"districtmanage.h"
using namespace std; //录入函数
void districtmanage::input()
{
district *p, *p2 = NULL; //建立两个行政区类指针,并让p2指向null
p = head; //让p指向head节点
int n=; //定义一个整数赋值1
while (p->next) //当p的next节点不为空,p就等于下一个节点
p = p->next;
while (n)
{
p2 = new district; //将p2指向一个新的行政区类对象
p2->input(); //给p2的数据成员赋值
p->next = p2; //把p2给p的next节点
p2->next = NULL; //把p2的next节点赋值null以便下次调用input函数
p = p->next; //把p的next节点赋给p
districtmanage::setkey(); //让key=1
cout << "按1继续,按0返回 : ";
cin >> n; //按1继续循环,继续输入操作
}
} //子查找函数
int districtmanage::find(district *p1, int postcode1, char *pn)//在found里调用find
{
district *p;
p = head;
while (p->next) //这一步
{
(*p) = (*p1);
if ((p->next)->getpostcode() == postcode1 || !strcmp((p->next)->getname(), pn)) //如果你输入的邮编
return ; //或你输入的name和这个节点的相同,就返回1,然后继续对下一个节点操作
p = p->next; //和这一步一起对指针节点们进行了遍历
}
return ;
} //查找函数
void districtmanage::found()
{
district *p; //建立一个行政区类的指针
p = head; //将p指向head节点
int postcode = -, n = ;
char name[] = "^"; //默认name的初始值为^
do
{
cout << "1:按邮政编码查找,2:按行政区名查找: ";
cin >> n;
} while (n< || n>);
if (n == )
{
cout << "请输入邮编: ";
cin >> postcode;
}
if (n == )
{
cout << "请输入行政区名: ";
cin >> name;
}
if (!find(p, postcode, name))
{
cout << "SORRY!找不到你要查找的内容!" << endl;
return; //在if里return这里是程序结束的意思
}
(p->next)->output(); //如果找到了相应的节点,就把它输出到屏幕上
} //删除函数
void districtmanage::del() //函数的缺点是只能删掉一个
{
district *p, *p2; //定义两个行政区类的指针
int postcode; //定义一个整数postcode
cout << "请输入邮编: "; //输入邮编
cin >> postcode;
p = head; //将p指向head节点
if (!find(p, postcode, "^")) //如果找不到邮编和p指针
{
cout << "SORRY!找不到你要删除的内容!" << endl; //就输出 SORRY!找不到你要删除的内容!
return;
}
(p->next)->output(); //调用p的next子对象(p的下一个节点)的输出
p2 = p->next; //将p的next节点给p2
p->next = p2->next; //然后让p的下一个节点等于p2的下一个节点
delete p2; //删除p2对象
districtmanage::setkey(); //给key赋值1
}
//显示函数
void districtmanage::show()
{
district *p;
p = head;
while (p->next)
{
(p->next)->output();
p = p->next;
}
}
//修改函数
void districtmanage::mend()
{
district *p; //定义一个行政区类的指针
int postcode = -, n; //定义两个整数
char name[] = "^"; //将name的默认值定义为^
do
{
cout << "1:按邮编修改,2:按行政区名修改: ";//
cin >> n;
} while (n< || n>);
if (n == )
{
cout << "请输入邮编: ";
cin >> postcode;
}
if (n == )
{
cout << "请输入行政区名: ";
cin >> name;
}
p = head;
if (!find(p, postcode, name))
{
cout << "SORRY!找不到你要修改的内容!" << endl;
return;
}
(p->next)->output(); //p的下一个指针输出
(p->next)->input(); //p的下一个节点调用input函数给数据成员赋值
districtmanage::setkey(); //给key赋值1
}
//保存函数
void districtmanage::save()
{
district *p;
p = head;
ofstream os("district.txt", ios::out);
if (districtmanage::getkey() == )
{
while (p->next)
{
(p->next)->output(os);
p = p->next;
}
}
cout << "文件已保存! " << endl;
districtmanage::setkey();
}
//初始化函数
void districtmanage::begin()
{
district *p, *p2; //p2只是用来给p以及p的next节点赋值的
p = head;
clear(); ifstream is("district.txt", ios::in);
if (!is)
{
ofstream os("district.txt", ios::out);
os.close();
return;
}
int num = -;
while ()
{
long t=;
num = -;
is.tellg(); //获取文件长度
is >> num; is.seekg(t); //找到这个文件的第t个字节
if (num<)
{
is.close();
return;
}
p2 = new district;
p2->input();
p->next = p2; //把p2给p的next节点
p2->next = NULL; //把p2的next节点赋值null以便下次调用input函数
p = p->next; //把p的next节点赋给p
}
}
//清空函数
void districtmanage::clear()
{
district *p, *p2;
p = head->next;
while (p)
{
p2 = p;
p = p->next;
delete p2;
}
} //主选菜单函数
char districtmanage::mainmenu()
{
char n[];
cout << "\n\n ☆☆☆☆欢迎进入吉林省行政区划管理系统☆☆☆☆" << endl << endl;
cout << " * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl;
cout << " * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl;
cout << " * * 1: 录入行政区信息 * *" << endl;
cout << " * * 2: 显示行政区信息 * *" << endl;
cout << " * * 3: 查找行政区信息 * *" << endl;
cout << " * * 4: 删除行政区信息 * *" << endl;
cout << " * * 5: 修改行政区信息 * *" << endl;
cout << " * * 6: 保存行政区信息 * *" << endl;
cout << " * * 0: 退出系统 * *" << endl;
cout << " * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl;
cout << " * * * * * * * * * * * * * * * * * * * * * * * * * *" << endl;
cout << " 请选择:";
cin >> n;
return n[];
}

main.cpp

 #include"district.h"
#include"districtmanage.h"
#include<iostream>
using namespace std;
void main()
{
districtmanage p;
int k = ;
char n;
p.begin(); //先调用begin函数
while (k == )
{
n = p.mainmenu(); // 将p.mainmenu的值赋给n
switch (n)
{
case '':p.input(); break;
case '':p.show(); break;
case '':p.found(); break;
case '':p.del(); break;
case '':p.mend(); break;
case '':p.save(); break;
case '':
if (p.getkey() == ) //如果p中key为1
{
cout << "\t\t\t是否保存? 1 : 保存 0:不保存 : ";
cin >> k;
if (k == )
p.save();
}
p.clear(); //k=0,执行clear函数,清除所有数据
k = ; //最后将k归零,防止输入了别的数最后k也能为0
break; //可以选择1或0后跳出while循环
}
}
}

district.h

 #pragma once
#include<string>
#include<fstream>
#include<iomanip>
using namespace std;
class district
{
protected:
char name[]; // 行政区名
float count; // 人口
float area; // 土地面积
int postcode; //邮编 public:
district *next;
district(){ }
void output();
void input();
void input(ifstream & is);
void output(ofstream & os);
char* getname(){ return name; }
int getpostcode(){ return postcode; }
float getcount(){ return count; }
float getarea(){ return area; } };

districtmanage.h

 #include<string>
#include<fstream>
#include<iomanip>
#include"district.h"
using namespace std;
class districtmanage
{
public:
districtmanage(){ head = new district ; head->next = NULL; key = ; }
~districtmanage(){ delete head; }
void input(); //录入函数
void mend(); //修改函数
void del(); //删除函数
int find(district *p, int postcode1, char *pn = "^"); //子查找函数
void found(); //查找函数
void show(); //显示函数
void save(); //保存函数
void begin(); //初始化函数
void clear(); //清空函数
char mainmenu(); //主菜单函数
int getkey(){ return key; }
void setkey(int k){ key = k; }
private:
district *head;
int key;
};

我们要求在VC6.0上运行,所以emmmm......

不喜勿喷。溜了溜了。

05-11 20:16