当前位置:文档之家› 数据结构课程设计-活期储蓄账目管理系统(含有排序和文章编译功能)

数据结构课程设计-活期储蓄账目管理系统(含有排序和文章编译功能)

题目:活期储蓄帐目管理活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求:能比较迅速地找到储户的帐户,以实现存款、取款记账;并能实现排序能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。

一、主函数main#include "文章编辑系统.h"#include "排序子系统.h"#include "活期帐目管理系统.h"#include <stdio.h>#include <string.h>#include <iostream>using namespace std;void main(){int choice;char ch;ch='y';while (ch=='y'||ch=='Y'){printf("\n\n\n\n\t\t 数据结构实验演示系统\n\n\n");printf("\t\t 主菜单");printf("\n\t\t**************************************");printf("\n\t\t* 1-------文章编辑系统*");printf("\n\t\t* 2-------排序子系统*");printf("\n\t\t* 3-------活期帐目管理系统*");printf("\n\t\t* 0-------退出*");printf("\n\t\t**************************************");printf("\n\n\t\t请选择菜单号(0--3):");scanf("%d",&choice);getchar();switch(choice){case 1: Article(); break;case 2: sort(); break;case 3: Banksystem();break;case 0: ch='n'; break;default:printf("菜单选择错误!请重新输入!");}}}二、文章编译系统#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<iostream>using namespace std;struct Node{char letter;Node *next;};void InitList(Node *L){ //输入以"*"结束的文章cout<<"\t\t\t输入一页文字(以*结束): "<<endl<<endl;while((L->letter = getchar()) != '*'){L->next = new Node;L = L->next;}L->next = NULL;cout<<"输入成功!";}void CountStr(Node *L){ //统计某一字符串在文章中出现次数int n = 0;char s[80], *q;Node *p;cout<<"\t\t\t输入一字符串: ";cin>>s;while(L->next){for (p = L, q = s; *q != '\0' && p->next; p = p->next, q++)if (p->letter != *q) break;if (*q == '\0') n++;L = L->next;}cout<<"\t\t\t字符串"<<s<<" 出现"<<n<<" 次\n";}Node *DelStr(Node *L){//删除某一子串Node *H = L;char s[80], *q;Node *p;cout<<"\t输入该子串: ";cin>>s;if (H->letter == *s){for (p = H->next, q = s+1; *q != '\0' && p->next; p = p->next, q++)if (p->letter != *q) break;if (*q == '\0') H = p;}while(L->next){for (p = L->next, q = s; *q != '\0' && p->next; p = p->next, q++)if (p->letter != *q) break;if (*q == '\0') L->next = p;else L = L->next;}return H;}void print1(Node *L){ //分行输出用户输入的各行字符while(L->next){cout<<L->letter;L = L->next;}cout<<endl;}void print2(Node *L, int &p1, int &p2, int &p3, int &n){ //统计中英文字母和空格数以及整篇文章总字数n = p1 = p2 = p3 = 0;for( ; L->next; L = L->next, n++)if(isalpha(L->letter)) p1++;else if(isdigit(L->letter)) p2++;else if(L->letter == ' ') p3++;else if(L->letter == '\n') n--;cout<<"\n\t\t\t全部字母数: "<<p1;cout<<"\n\t\t\t数字个数: "<<p2;cout<<"\n\t\t\t空格个数: "<<p3;cout<<"\n\t\t\t文章总字数: "<<n<<endl;}void Article(){system("cls");Node *L = new Node;int p1, p2, p3, n;char choice,ch;;do{printf("\n\n\n\t\t\t======== 文章编辑系统==========\n" );printf("\t\t\t* 1:输入文章* \n" );printf("\t\t\t* 2:统计编辑* \n" );printf("\t\t\t* 3:显示文章* \n" );printf("\t\t\t* 0:返回* \n" );printf("\t\t\t******************************** \n" );printf("\t\t请输入文章编辑系统菜单号:");cin>>choice;switch(choice){case '1':InitList(L);break;case '2':{printf("\t\t\t 1:统计中英文字母和空格数以及整篇文章总字数\n" );printf("\t\t\t 2:统计某一字符串在文章中出现次数\n" );printf("\t\t\t 3:删除某一子串\n" );printf("\t\t\t 0:返回\n" );do{printf("\t\t选择文章编辑操作:");cin>>ch;switch(ch){case '1': print2(L, p1, p2, p3, n);break;case '2': CountStr(L) ;break;case '3': DelStr(L) ;break;case '0': ch='0' ;break;default :printf("\t\t输入错误!请重新输入!\n" );break;}}while(ch!='0');break;}case '3':print1(L); break;case '0':choice=0 ; break;default :printf("\t\t输入错误!请重新输入!\n" );break;}}while(choice);}三、排序子系统#include<stdio.h>#include<stdlib.h>#include<math.h>#define L 8#define FALSE 0#define TURE 1typedef struct{int key;char otherinfo;}RecType;typedef RecType Seqlist[L+1];int num;Seqlist R;void Insertsort();void Bubblesort();void QuickSort(int low, int high);void Shellsort();void Selectsort();void Mergesort();int Partition(int i,int j);void Heap();void sort(){system("cls");Seqlist S;int i,k;char ch1,ch2,q;printf("\n\t请输入%d个待排序数据(按回车分隔):\n\t",L);for(i=1;i<=L;i++){scanf("%d",&S[i].key);getchar();printf("\t");}printf("\n\t排序数据已经输入完毕!");ch1='y';while(ch1=='y'||ch1=='Y'){printf("\n");printf("\n\t\t 排序子系统");printf("\n\t\t*************************************");printf("\n\t\t* 1----更新排序数据*");printf("\n\t\t* 2----直接插入排序*");printf("\n\t\t* 3----希尔排序*");printf("\n\t\t* 4----冒泡排序*");printf("\n\t\t* 5----快速排序*");printf("\n\t\t* 6----选择排序*");printf("\n\t\t* 7----归并排序*");printf("\n\t\t* 8----堆排序*");printf("\n\t\t* 0----返回*");printf("\n\t\t*************************************");printf("\n\t\t 请选择菜单号(0--8):");scanf("%c",&ch2);getchar();for(i=1;i<=L;i++)R[i].key=S[i].key;switch(ch2){case '1':printf("\n\t\t请输入&d 个待排序的数据(按回车分隔):\n\t",L);for(i=1;i<=L;i++){scanf("%d",&S[i].key);getchar();printf("\t");}printf("\n\t排序数据已经输入完毕!");break;case'2':Insertsort();break;case'3':Shellsort();break;case'4':Bubblesort();break;case'5':printf("\n\t原始数据为(按回车开始排序):");for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");num=0;QuickSort(1,L);printf("\n\t排序的最终结果是: ");for (k=1;k<=L;k++)printf("%5d",R[k].key);printf("\n");break;case'6':Selectsort();break;case'7':Mergesort();break;case'8':Heap();break;case'0':ch1='n';break;default:printf("\n\t输入出错!");}if(ch2!='0'){if(ch2=='2'||ch2=='3'||ch2=='4'||ch2=='5'||ch2=='6'||ch2=='7'||ch2=='8')printf("\n\t排序输出完毕!");printf("\n\n\t按回车键返回.");q=getchar();if(q!='\xA'){getchar();ch1='n';}}}}void Insertsort(){int i,j,k,m=0;printf("\n\t原始数据为(按回车开始排序):");for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");for(i=2;i<=L;i++){if(R[i].key<R[i-1].key){R[0]=R[i];j=i-1;while(R[0].key<R[j].key){R[j+1]=R[j];j--;}R[j+1]=R[0];}m++;printf("\t第%d趟排序结构为(按回车继续):",m);for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");}printf("\n\t排序的最终结果是:");for(i=1;i<=L;i++)printf("%5d",R[i].key);printf("\n");}void Shellsort(){int i,j,gap,x,m=0,k;printf("\n\t原始数据为(按回车开始排序): ");for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");gap=L/2;while(gap>0){for(i=gap+1;i<=L;i++){j=i-gap;while(j>0){if(R[j].key>R[j+gap].key){x=R[j].key;R[j].key=R[j+gap].key;R[j+gap].key=x;j=j-gap;}elsej=0;}}gap=gap/2;m++;printf("\t第%d趟排序结果为(按回车继续):",m);for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");}printf("\n\t排序的最终结果是: ");for(k=1;k<=L;k++)printf("%5d",R[k].key);printf("\n");}void Bubblesort(){int i,j,k;int exchange;printf("\n\t原始数据为(按回车开始排序:");for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");for(i=1;i<L;i++){exchange=FALSE;for(j=L;j>=i+1;j--)if(R[j].key<R[j-1].key){R[0].key=R[j].key;R[j].key=R[j-1].key;R[j-1].key=R[0].key;exchange=TURE;}if(exchange){printf("\t第%d趟排序结果为(按回车继续:",i);for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");}}printf("\n\t排序的最终结果是:");for(i=1;i<=L;i++)printf("%5d",R[i].key);printf("\n");}int Partition(int i, int j){RecType pirot=R[i];while(i<j){while(i<j&&R[j].key>=pirot.key)j--;if(i<j)R[i++]=R[j];while(i<j&&R[i].key<=pirot.key)i++;if(i<j)R[j--]=R[i];}R[i]=pirot;return i;}void QuickSort(int low,int high){int pirotpos,k;if(low<high){pirotpos=Partition(low,high);num++;printf("\t第%d趟排序结果为(按回车继续): ",num);for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");QuickSort(low,pirotpos-1);QuickSort(pirotpos+1,high);}}void Selectsort(){int i,j,k,h;printf("\n\t原始数据为(按回车继续:");for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");for(i=1;i<L;i++){h=i;for(j=i+1;j<=L;j++)if(R[j].key<R[h].key)h=j;if(h!=j){R[0]=R[i];R[i]=R[h];R[h]=R[0];}printf("\t第%d趟排序结果为(安回车继续):",i);for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");}printf("\n\t排序的最终结果是:");for(i=1;i<=L;i++)printf("%5d",R[i].key);printf("\n");}void Merge(int low,int mm,int high){int i=low,j=mm+1,p=0;RecType *R1;R1=new RecType[high-low+1];if(!R1)printf("\n\t内存容量不够!");while(i<=mm&&j<=high)R1[p++]=(R[i].key<=R[j].key)?R[i++]:R[j++];while(i<=mm)R1[p++]=R[i++];while(j<=high)R1[p++]=R[j++];for(p=0,i=low;i<=high;p++,i++)R[i]=R1[p];}void MergePass(int length){int i;for(i=1;i+2*length-1<=L;i=i+2*length)Merge(i,i+length-1,i+2*length-1);if(i+length-1<L)Merge(i,i+length-1,L);}void Mergesort(){printf("\n\t原始数据为(按回车键开始排序):");for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");for(length=1;length<L;length*=2){MergePass(length);m++;printf("\t第%d趟排序结果为(按回车继续): ",m);for(k=1;k<=L;k++)printf("%5d",R[k].key);getchar();printf("\n");}printf("\n\t排序的最终结果是: ");for(k=1;k<=L;k++)printf("%5d",R[k].key);printf("\n");}void CreateHeap(int root,int index) //堆栈{int j,temp,finish;j=2*root;temp=R[root].key;finish=0; //初始化堆未建立完成while(j<=index && finish==0){if(j<index) //找最大的子节点if(R[j].key<R[j+1].key)j++;if(temp>=R[j].key)finish=1; //堆建立完成else{R[j/2].key=R[j].key;j=j*2;}}R[j/2].key=temp; //父节点=root值}void HeapSort() //堆排序{for(i=(L/2);i>=1;i--) //键二叉树转换成堆CreateHeap(i,L); //调用建堆函数for(i=L-1,k=1;i>=1;i--,k++){temp=R[i+1].key; //堆的root值和最后一个值交换R[i+1].key=R[1].key;R[1].key=temp;CreateHeap(1,i);printf("\t第%d趟排序结果为(按回车继续):",k);for(j=1;j<=L;j++)printf("%5d",R[j].key);getchar();printf("\n");}}void Heap(){int i;printf("\n\t原始数据为(按回车开始排序):");for(i=1;i<=L;i++)printf("%5d",R[i].key);printf("\n\t");getchar();HeapSort();printf("\n\t排序的最终结果是:");for(i=1;i<=L;i++)printf("%5d",R[i].key);printf("\n");}四、活期账目管理系统#include<iostream>#include <string>#include<stdlib.h>#include<fstream>using namespace std;class consumer;class YH{public:YH();void set_account();//银行开户void del_account();void transfer(int); //转账void enter_account();void addmoney(int,float);void exitYH();// 退出系统void functionshow();// 功能界面void save();void load();protected:consumer *account[20];//账户数static int acnum;};int YH::acnum=0;YH::YH(){for(int i=0;i<20;i++){account[i] = NULL;}}class consumer:public YH{public:friend class YH;consumer(int id,string Name,string PassWord,float m) {ID=id;name=Name;money=m;passwd=PassWord;}consumer(){ID=0;name='0';money=0;passwd='0';}int get_id(){return ID;}void savemoney();// 取钱string get_passwd() // 取得密码{return passwd;}void display();void fetchmoney(); //取钱void change_passwd();void add_money(float);void dec_money(float);float get_money();private:int ID; //开户帐号string passwd; // 用户密码string name; // 用户姓名float money;};void YH::save(){ofstream ofile("bankdat.dat",ios::out);ofstream outfile("bankdat.dat",ios::out);int n=0;outfile<<acnum<<" ";for(;n<acnum;n++){outfile<<account[n]->ID<<" ";outfile<<account[n]->money<<" ";outfile<<account[n]->name<<" ";outfile<<account[n]->passwd<<" ";}outfile.close();}void YH::load(){ifstream infile("bankdat.dat",ios::in);if(!infile){cerr<<"读取错误,无资料!"<<endl;return;}int n=0;int id,m;string nam,passw;infile>>acnum;for(;n<acnum;n++){infile>>id;infile>>m;infile>>nam;infile>>passw;account[n]->passwd;consumer * acc = new consumer(id,nam,passw,m);account[n] = acc;}infile.close();cout<<"读取资料正常!"<<endl;}void YH::transfer(int x){int id;cout<<"请输入帐号:";cin>>id;int flag = 1;int i = 0;while((i<acnum)&&(flag)){if(id==account[i]->get_id()) flag = 0; else i++;}if(flag){cout<<"帐号不存在!"<<endl<<endl;return ;}float b;cout<<endl<<"请输入你要转帐的金额:";cin>>b;while(b<=0){cout<<"请输入正确的数字!"<<endl;cout<<"$";cin>>b;}if(account[x]->get_money()<b)cout<<"对不起,金额不够!!"<<endl;else{account[x]->dec_money(b);account[i]->add_money(b);}return;}void consumer::add_money(float x){money=x+money;}void consumer::dec_money(float x){money=money-x;}void YH::addmoney(int x,float y){account[x]->money=account[x]->money-y;}float consumer::get_money(){return money;}void YH::functionshow(){int n;int z=1;do{system("cls");cout<<"\t\t**************银行管理系统*******"<<endl;//cout<<"\t\t 1.用户开户"<<endl;cout<<"\t\t 2.账户登陆"<<endl;cout<<"\t\t 3.帐户注销"<<endl;cout<<"\t\t 0.退出系统"<<endl;cout<<"\t\t*********************************"<<endl;load();cout<<endl<<"\t\t请你输入相应的操作序号进行操作:";cin>>n;if(n<0||n>3){cout<<"\t\t请输入正确的操作序号!"<<endl;cout<<"$ >";cin>>n;}switch(n){case 1: set_account() ;break;case 2:enter_account() ;break;case 3: del_account() ;break;case 0: exitYH();z=0 ;break;cin.get();}while(z);}void YH::enter_account(){int id;cout<<"\t\t请输入帐号:";cin>>id;int flag = 1;int i = 0; //while((i<acnum)&&(flag)){if(id==account[i]->get_id()) flag = 0; else i++;}if(flag){cout<<"\t\t帐号不存在!"<<endl<<endl;cin.get();return;}cout<<"\t\t请输入密码:";string passw;cin>>passw;if(passw!=account[i]->get_passwd()) return;account[i]->display();cin.get();cin.get();int n;do{system("cls");cout<<"\t\t请选择你要进行的操作:"<<endl<<"\t\t1)查看信息"<<endl<<"\t\t2)取款"<<endl<<"\t\t3)存款"<<endl<<"\t\t4)修改密码"<<endl<<"\t\t5)转账"<<endl<<"\t\t6)返回"<<endl;cin>>n;switch(n){case 1: account[i]->display();break;case 2: account[i]->fetchmoney();save();break;case 3:account[i]->savemoney();save();break;case 4:account[i]->change_passwd();save();break;case 5:transfer(i);save();break;case 6:return;cin.get();cin.get();}while(1);}void YH::set_account(){int id;string nam;string passw;float m;cout<<endl<<"\t\t请输入开户号:";cin>>id;cout<<endl<<"\t\t请输入开户人姓名:";cin>>nam;cout<<endl<<"\t\t请输入开户密码:";cin>>passw;cout<<endl<<"\t\t请输入存入金额:";cin>>m;while(m<=0){cout<<"\t\t请输入正确的数字!"<<endl;cin>>m;}consumer * acc = new consumer(id,nam,passw,m);account[acnum] = acc;cout<<"\t\t开户成功!!"<<endl<<endl;acnum++;save();cin.get();return;}void YH::del_account(){int id;cout<<endl<<"\t\t请输入你要注销的帐户号:";cin>>id;int flag = 1;int i = 0;while((i<acnum)&&(flag)){if(id == account[i]->get_id())flag = 0;elsei++;}if(flag){cout<<"\t\t帐号不存在!"<<endl<<endl;return;}cout<<"\t\t请输入密码:";string passw;cin>>passw;if(passw!=account[i]->get_passwd()) return;for(int j=i;j<acnum;j++){account[j] = account[j+1];}account[acnum-1]=NULL;acnum--;cout<<"\t\t注销成功!!"<<endl<<endl;save();cin.get();return;}void consumer::change_passwd(){string pwd,repwd;cout<<"\t\t请输入新密码:";cin>>pwd;cout<<"\t\t请再输入一次新密码:";cin>>repwd;if(pwd!=repwd)cout<<"\t\t你输入的两次密码不一样,请重新输入!"<<endl;passwd=pwd;cout<<"\t\t密码修改成功,请牢记!"<<endl;cin.get();}void consumer::fetchmoney(){float m;char ch;do{cout<<endl<<"\t\t你要取多少钱:"<<"$"<<endl ;cin>>m;while(m<=0){cout<<"\t\t请输入正确的数字!"<<endl;cout<<"$";cin>>m;}if(money<m){cout<<"\t\t对不起,你的余额不足!"<<endl;}else{money=money-m;cout<<endl<<"\t\t操作成功,请收好钱!"<<endl;}cout<<"\t\t是否要继续该项操作:(Y/N) "<<endl;cout<<"$ >";cin>>ch;while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y'){cout<<"$ >";cin>>ch;}}while(ch=='y'||ch=='Y');}void consumer::savemoney(){float c;char ch;do{cout<<endl<<"\t\t你要存多少钱:"<<"$"<<endl ;cin>>c;while(c<=0){cout<<"\t\t请输入正确的数字!"<<endl;cout<<"$";cin>>c;}money=money+c;cout<<"\t\t操作已成功!"<<endl;cout<<"\t\t是否要继续该项操作:(Y/N) "<<endl;cout<<"$ >";cin>>ch;while(ch!='n'&&ch!='N'&&ch!='Y'&&ch!='y'){cout<<"$ >";cin>>ch;}}while(ch=='y'||ch=='Y');}void consumer::display(){system("cls");cout<<"\t\t**********************************"<<endl;cout<<"\t\t*"<<endl;cout<<"\t\t*用户姓名:"<<name<<endl;cout<<"\t\t*帐号:"<<ID<<endl;cout<<"\t\t*余额:"<<money<<endl;cout<<"\t\t**********************************"<<endl;cout<<"\t\t请按任意键继续.....";}void YH::exitYH(){cout<<endl<<"\t\t感谢你对本银行储蓄管理系统的支持,欢迎下次光临!"<<endl; }void Banksystem(){YH yh;yh.functionshow();}。

相关主题