VF个人理财系统(源代码及全套资料)
- 格式:pdf
- 大小:3.61 MB
- 文档页数:31
目录1 绪论 (1)1.1课题背景 (1)1.2国内外研究的现状 (1)1.3本课题研究的意义 (2)1.4本课题的研究方法 (2)2 可行性研究 (3)2.1技术可行性 (3)2.2经济可行性 (3)2.3操作上的可行性 (4)3 系统需求分析 (5)3.1系统功能分析 (5)3.1系统的主要内容和基本要求 (5)3.2业务流分析 (6)3.2.1系统业务流程图 (6)3.2.2系统数据流图 (7)3.2.3系统数据字典 (8)3.2.4系统E-R图 (8)4 系统设计 (9)4.1系统模块设计 (9)4.2系统相关设计 (9)4.2.1数据库相关视图 (11)5 各模块功能详细设计 (14)5.1公用配置文件 (14)5.2用户登录模块 (14)5.2.1设计功能 (14)5.2.2用户登录流程图 (14)5.2.3功能实现所需主要代码的描述 (14)5.2.4登录功能测试 (15)5.2.5代码实现效果 (15)5.3账簿管理模块 (15)5.3.2账簿管理模块流程图 (15)5.3.3功能实现所需主要代码的描述 (16)5.3.4控件的测试 (17)5.4家庭成员管理模块 (17)5.4.1设计功能 (17)5.4.2家庭成员管理模块流程图 (17)5.4.3功能实现所需主要代码的描述 (18)5.4.4控件的测试 (19)5.5银行卡管理模块 (19)5.5.1设计功能 (19)5.5.2银行卡管理模块流程图 (19)5.5.3功能实现所需主要代码的描述 (20)5.5.4控件的测试 (21)5.6收支项目管理模块 (22)5.6.1设计功能 (22)5.6.2收支项目管理模块流程图 (22)5.6.3功能实现所需主要代码的描述 (22)5.6.4控件的测试 (23)5.7预算管理模块 (23)5.7.1设计功能 (23)5.7.2预算管理模块流程图 (23)5.7.3功能实现所需主要代码的描述 (24)5.7.4控件的测试 (25)5.8报表统计管理模块 (25)5.8.1设计功能 (25)5.8.2报表统计功能实现的主要代码 (25)5.8.3代码实现的效果 (27)5.8.4报表功能测试 (27)5.9权限管理模块 (27)5.9.1设计功能 (27)5.9.2权限设置功能实现的主要代码 (28)5.9.3代码实现的效果 (28)5.9.4权限功能测试 (28)6用户使用手册 (29)6.1运行环境需求 (29)6.3系统操作及布局详细介绍 (29)结论 (29)致谢 (29)主要参考文献 (35)1 绪论家庭投资理财的目的就是家庭财产保值增值,或者叫家庭财富最大化。
所谓万能代码就是当你不清楚表单题目中的代码该怎么写了,那么就把这些代码写进去,忽悠电脑,让电脑给你一些分。
如果你能写出正确的代码,还是自己写最好!VF上机题做完后,是机器评分。
它不会再去运行,只是看你的结果和过程是否符合要求。
所以,当你不会的时候可以把以下的代码全部写上。
if else endifdo case case otherwise endcasedo while exit loop enddofor endforscan exit loop endscan val() ctod() str() year() month()select from where order by desc group by having into tableinto array凡是题目当中出现的控件,必须在程序代码中出现thisform.text1.valuethisform.edit1.valuethisform.check1.valuebo1.valuethisform.List1.Valuethisform.spinner1.valuethisform.grid1.recordsource=" "题目要求中的表名,也全部写出来。
原则是:答案可以通过手工做出来。
过程电脑没办法评测,只能看代码中是否有关键语句,所以能写出多少,就写多少,不要管对错。
【重要提示】上机考试是由机器自动评分,在评分中大体上可以分为两种评分方法。
一是,检查命令是否正确,即检查题目正确答案所要求的关键字是否存在,如存在,则可以得分。
二是,检查所要求的结果是否正确,例如,考试要求建立一个查询,文件名为myquery.qpr,并设置查询去向为表results.dbf,则系统在评分是即要检查myquery.qpr 是否正确,又要检查results.dbf文件是否正确。
根据系统评分的特点,我们就可以对上机考试投机取巧。
如果评分系统是检查命令是否正确,就可以采用万能代码法。
用C++编写个人理财软件学生:xxx 指导老师:xxx摘要本课程设计主要解决个人日常生活中收入与支出等进行记录的程序设计.在课程设计中,系统开发平台为Windows xp,程序设计开发环境采用Microsoft visual studio 2005,数据库采用Microsoft Access 2003,程序运行平台为Windows 98/2000/XP。
对于收入支出进行记录,在程序设计中,采用了面向对象解决问题的方法。
程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在商业中为个人解决简单的实际问题。
关键词程序设计;数据库;SQL;c++;个人理财1 引言随着时代的进步、社会的发展,人们越来越富裕走向小康的时候一个问题凸现出来,就是个人理财。
理财的目的,在追求不虞遗乏的丰富人生,是以经济学为精神、会计学为基础、财务学为手段的一门实用科学。
为什么要理财?每个人都希望过幸福美满的生活,但是你首先应自问有没有这样的能力?房子、车子、股票、珠宝…//系统生成代码,略去…//系统生成代码,略去,在某些人眼里是财富的象征,生活品质的保证,是他们努力追求的价值。
也有许多所谓的有钱人,宁愿选择平平淡淡的生活,辛勤工作、努力储蓄,他们不认为华丽的外表相可以代表高水准的生活品质。
不过,显然大多数人一生中都是无法满足的。
心理学家马斯洛的需求理论告诉我们,人类的需求是有层级之分的:在安全无虞的前提下追求温饱,当基本生活条件获得满足之后,则需求得到社会的尊重;并进一步追求人生的最终目标自我实现。
而要依层级满足这些需求,必须建立在不虞遗乏的财务条件上。
因此,你必须认识理财的重要,订定一套适合自己的理财计划,来达成自己的生活目标。
我们知道,追求效益极大化是经济学的基本精神,即说以最小的代价,获得最大的收益。
但这并非表示我们吝于付出,因为资源是有限的,稀少的资源,迫使我们必须做选择,而理财行为就是聪明的选择。
个人理财系统详细设计版本1.01.编写目的:本软件是简单实用的公共软件。
考虑到系统的构架简单,且主要实现主要模块,提供清晰的设计框架,本文档在先做出概要设计前提下,然后在概要设计的基础上进行扩展和详细的描述,完成主要模块的详细设计。
(本文档的详细设计包括界面设计,帐目管理模块的设计,其他的设计和帐目模块类似)。
2.功能列表:3.系统设计思想:系统采用C\S设计模式,考虑到个人使用的简单性和方便性,在不需要上网的情况下进行系统使用。
具体的描述参看模块描述。
4.系统结构4.2对象模型4.2.1数据对象模型:Account :帐户数据类型。
AccountCollection :表示由Account对象组成的集合。
Financial.Properties.Resources :一个强类型的资源类,用于查找本地化的字符串等。
UserCollection.cs :表示由User对象组成的集合。
User.cs :系统用户类型Debit :借贷类型DebitCollection : Debit类型对象的集合Income : 用户收支类型IncomeCollection : 表示Income对象的集合4.2.2业务对象模型:帐目管理收支管理借贷管理统计基础数据维护5.系统模块描述5.1概述系统模块描述提供编码阶段的依据和对照,建立系统的模块框架。
5.2模块列表名称说明Account.cs 帐户类型AccountCollection.cs 表示由Account对象组成的集合AccountManager.cs 帐户管理器类型FormAccountManage.cs 帐户管理窗口FormDebitManage.cs 借贷管理窗口FormAddAccount.cs 帐户添加FormFinancialManage.cs 个人理财管理FormLogin.cs 登陆界面FormRegistNewUser.cs 注册新用户的窗体Program.cs 主程序Financial.Properties.Resources 一个强类型的资源类,用于查找本地化的字符串等UserCollection.cs 表示由User对象组成的集合UserManager.cs 用户管理器,负责用户相关信息管理FormMain.cs 系统主窗口User.cs 系统用户类型Debit 借贷类型DebitCollection Debit类型对象的集合DebitManager 借贷管理器类型Income 用户收支类型IncomeCollection 表示Income对象的集合IncomeManager 收支管理器类型5.3模块描述$提供主要模块的描述:帐目管理//---------------------------------------------------------------------------------------------------------------------Account.cs 帐户类型属性说明类型AccountType 获取或设置帐户类型 stringBankbookNum 获取或设置存折号 stringCardNum 获取活设置卡号 stringIniBlance 获取或设置初始金额 doubleMoneyType 获取或设置货币类型 stringOwnerName 获取设置帐户户主名称 stringRemainBlance 获取或设置余额 doubleRemark 获取或设置备注信息 stringStartDate 获取或设置开户日期 System.DateTime方法说明类型//--------------------------------------------------------------------------------- AccountCollection.cs 表示由Account对象组成的集合属性说明类型Count 取得集合元素个数 int方法说明类型Add 向集合中添加元素 intRemove 从集合中移出指定元素 voidRemoveAt 从集合中移出指定索引的元素 void//--------------------------------------------------------------------------------- AccountManager.cs 帐户管理器类型属性说明类型AccoutList 获取或设置帐户列表 Financial.AccountCollection方法说明类型LoadDataFromFile 重文件读取帐户信息 boolSaveDataToFile 将帐户管理数据保存到文件 bool//--------------------------------------------------------------------------------- FormAccountManage.cs 帐户管理窗口属性方法//--------------------------------------------------------------------------------- FormDebitManage.cs 借贷管理窗口属性方法//--------------------------------------------------------------------------------- FormAddAccount.cs 帐户添加属性方法//--------------------------------------------------------------------------------- FormFinancialManage.cs 个人理财管理属性方法//--------------------------------------------------------------------------------- FormLogin.cs 登陆界面属性方法//--------------------------------------------------------------------------------- FormRegistNewUser.cs 注册新用户的窗体属性方法//---------------------------------------------------------------------------------Program.cs 主程序属性方法说明类型Main 应用程序的主入口点 void//--------------------------------------------------------------------------------- Financial.Properties.Resources 一个强类型的资源类,用于查找本地化的字符串等属性方法//--------------------------------------------------------------------------------- Financial.Properties.Settings属性方法//--------------------------------------------------------------------------------- UserCollection.cs 表示由User对象组成的集合属性方法说明类型this 索引器 erAdd 添加元素 voidRemove 删除元素 voidRemoveAt 按索引号删除元素 void//--------------------------------------------------------------------------------- UserManager.cs 用户管理器,负责用户相关信息管理属性说明类型DirOfUserListFile 获取保存用户列表的文件的文件夹的绝对路径 string DirOfUserListFile_Relative 获取保存用户列表的文件的文件夹的相对路径 string PathOfUserListFile 获取保存用户列表的文件绝对路径 stringUserList 获取或设置当前系统所有用户列表 erCollection 方法//--------------------------------------------------------------------------------- FormMain.cs 系统主窗口属性方法//---------------------------------------------------------------------------------User.cs 系统用户类型属性说明类型AccountMagr 获取其AccountManager对象 Financial.AccountManager DirOfDataFile 获取用户数据文件所在目录的绝对路径 stringDirOfDataFile_Relative 获取用户数据文件所在目录的相对路径 stringIsAdministrator 获取或设置一个值,其指示该用户是否为系统管理员 boolPassWord 获取或设置密码 stringPathOfDataFile_Account 获取帐户管理数据文件的绝对路径 stringPathOfDataFile_Account_Relative 获取帐户管理数据文件的相对路径 stringUserName 获取或设置用户名 string方法//---------------------------------------------------------------------------------Debit 借贷类型属性说明类型Form 借出方 stringTo 借入方 stringBalance 金额 doubleDate 借入借出日期 DateTimeAbout 备注 string方法//------------------------------------------------------------------------------------------ DebitCollection : Debit类型对象的集合属性说明类型Count 取得集合元素个数 int方法说明类型Add 向集合中添加元素 intRemove 从集合中移出指定元素 voidRemoveAt 从集合中移出指定索引的元素 void//------------------------------------------------------------------------------------------ DebitManager : 借贷管理器类型属性说明类型DebitList 获取或设置借贷列表 Financial.DebitCollection 方法说明类型LoadDataFromFile 重文件读取用户借贷信息 boolSaveDataToFile 将用户借贷数据保存到文件 bool//------------------------------------------------------------------------------------------ Income : 用户收支类型属性说明类型Owner 收支人 stringInBalance 收入金额 doubleOutBalance 支出金额 doubleIniBalance 初始金额 doubleBalance 余额 doubleType 收支类型 stringDate 发生日期 DateTimeAbout 备注 string方法//------------------------------------------------------------------------------------------ IncomeCollection : 表示Income对象的集合属性说明类型Count 取得集合元素个数 int方法说明类型Add 向集合中添加元素 intRemove 从集合中移出指定元素 voidRemoveAt 从集合中移出指定索引的元素 void//------------------------------------------------------------------------------------------ IncomeManager :收支管理器类型属性说明类型IncomeList 获取或设置收支列表 Financial.IncomeCollection 方法说明类型LoadDataFromFile 从文件读取收支信息 bool SaveDataToFile 将收支数据保存到文件 bool//------------------------------------------------------------------------------------------ 6.业务流程图信息数据文件信息数据文件信息数据文件数据文件数据文件7.界面描述7.1整体风格界面的整体风格的设计依据是:“个人理财系统界面概要设计文档(总体结构)”。
/******头文件(.h)***********/#include "stdio.h" /*I/O函数*/#include "stdlib.h" /*标准库函数*/#include "string.h"/*字符串函数*/#include "ctype.h" /*字符操作函数*/#define M 200 /*定义常数表示记录数*/typedef struct /*定义数据结构*/{char name[20]; /*姓名*/char units[30]; /*单位*/char tele[10]; /*电话*/char product_company[30];/* 生产厂家*/char designer[30]; /* 设计者*/char price[10]; /* 价格*/char kucun[10]; /* 库存量*/char year[4]; /* 出厂年份*/char month[2]; /* 出厂月份*/char day[2]; /* 出厂*/}ADDRESS;/******以下是函数原型*******/int enter(ADDRESS t[]); /*输入记录*/void list(ADDRESS t[],int n); /*显示记录*/void search(ADDRESS t[],int n); /*按姓名查找显示记录*/ int delete(ADDRESS t[],int n); /*删除记录*/int add(ADDRESS t[],int n); /*插入记录*/void save(ADDRESS t[],int n); /*记录保存为文件*/int load(ADDRESS t[]); /*从文件中读记录*/void display(ADDRESS t[]); /*按序号查找显示记录*/ void sort(ADDRESS t[],int n); /*按姓名排序*/void modify_price(ADDRESS t[],int n); /*快速查找记录*/ void copy(); /*文件复制*/void print(ADDRESS temp); /*显示单条记录*/int find(ADDRESS t[],int n,char *s) ; /*查找函数*/int menu_select(); /*主菜单函数*//******主函数开始*******/main(){int i;ADDRESS adr[M]; /*定义结构体数组*/int length=0; /*保存记录长度*/clrscr(); /*清屏*/for(;;)/*无限循环*/{clrscr(); /*清屏*/switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/{case 0:length=enter(adr);break;/*输入记录*/case 1:list(adr,length);break; /*显示全部记录*/case 2:search(adr,length);break; /*查找记录*/case 3:length=delete(adr,length);break; /*删除记录*/case 4:length=add(adr,length); break; /*插入记录*/case 5:save(adr,length);break; /*保存文件*/case 6:modify_kucun(adr,length); break; /*读文件*/case 7:display(adr);break; /*按序号显示记录*/case 8:sort(adr,length);break; /*按姓名排序*/case 9:modify_kucun(adr,length);break; /*快速查找记录*/case 10:copy();break; /*复制文件*/case 11:exit(0); /*如返回值为11则程序结束*/}}}/*菜单函数,函数返回值为整数,代表所选的菜单项*/menu_select(){char s[80];int c;/*gotoxy(1,25);*//* 将光标定为在第25行,第1列*/printf("press any key enter menu......\n");/*提示压任意键继续*/getch(); /*读入任意字符*/clrscr(); /*清屏*//*gotoxy(1,1); */printf("********************MENU*********************\n\n");printf(" 0. Enter record\n");printf(" 1. List the file\n");printf(" 2. Search record on name\n");printf(" 3. Delete a record\n");printf(" 4. add record \n");printf(" 5. Save the file\n");printf(" 6. Modify kucun\n");printf(" 7. Display record on order\n");printf(" 8. Sort to make new file\n");printf(" 9. Quick seek record\n");printf(" 10. Copy the file to new file\n");printf(" 11. Quit\n");printf("***********************************************\n");do{printf("\n Enter you choice(0~11):"); /*提示输入选项*/scanf("%s",s); /*输入选择项*/c=atoi(s); /*将输入的字符串转化为整型数*/}while(c<0||c>11); /*选择项不在0~11之间重输*/clrscr(); /*清屏*/return c; /*返回选择项,主程序根据该数调用相应的函数*/}/***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/int enter(ADDRESS t[]){int i,n;char *s;clrscr(); /*清屏*/do{printf("\nHow many numbers do you want to record?\nplease input the numbers you wanted:\n"); /*提示信息*/scanf("%d",&n); /*输入记录数*/if(n==0)printf("the num couldn't be '0'!Please enter again!");}while(n==0);printf("please input record! \n"); /*提示输入记录*/printf("name|unit|telephone|product_company|designer|price|kucun|year|mont h|day\n");printf("------------------------------------------------\n");for(i=0;i<n;i++){/*scanf("%s %s %s %s %s %s %s %s %s %s",t[i].name,t[i].units,t[i].tele,t[i].pr oduct_company,t[i].designer,t[i].price,t[i].kucun,t[i].year,t[i].month,t[i].day); *//*输入记录*/printf("name:"); /* 打印输出号码*/scanf("%s",&t[i].name);/* 用数组输入号码*/printf("unit:"); /* 打印输出名字*/scanf("%s",&t[i].units); /* 用数组输入姓名*/printf("telephone:");/* 打印输出性别*/scanf("%s",&t[i].tele);/* 用数组输入性别*/printf("product_company:"); /* 打印输出生日*/scanf("%s",&t[i].product_company); /* 用数组输入生日*/printf("designer:");/* 打印输出婚姻状况*/scanf("%s",&t[i].designer);/* 用数组输入婚姻状况*/printf("price:");/* 打印输出工作状况*/scanf("%s",&t[i].price);/* 用数组输入工作状况*/printf("kucun:");/* 打印输出工作状况*/scanf("%s",&t[i].kucun);/* 用数组输入工作状况*/printf("produce year:");/* 打印输出工作状况*/scanf("%s",&t[i].year);/* 用数组输入工作状况*/printf("produce month:");/* 打印输出工作状况*/scanf("%s",&t[i].month);/* 用数组输入工作状况*/printf("produce day:");/* 打印输出工作状况*/scanf("%s",&t[i].day);/* 用数组输入工作状况*/printf("-----------Ok!this record have been recorded!------------\n");}printf("the all have been recorded!\n");getch();clrscr();return n; /*返回记录条数*/}/*显示记录,参数为记录数组和记录条数*/void list(ADDRESS t[],int n){int i;clrscr();printf("\n\n*******************ADDRESS******************\n");printf("name|unit|telephone|product_company|designer|price|kucun|year|mont h|day\n");printf("------------------------------------------------------------------------\n");if(n!=0)for(i=0;i<n;i++){printf("%s/%s/%s/%s/%s/%s/%s/%s/%s/%s",t[i].name,t[i].units,t[i].tele,t[i].prod uct_company,t[i].designer,t[i].price,t[i].kucun,t[i].year,t[i].month,t[i].day);if((i+1)%10==0) /*判断输出是否达到10条记录*/{printf("Press any key continue...\n"); /*提示信息*/getch(); /*压任意键继续*/}}else printf("there is no record!\n");printf("************************end*******************\n");}/*查找记录*/void search(ADDRESS t[],int n){char s[20]; /*保存待查找姓名字符串*/int i; /*保存查找到结点的序号*//*clrscr(); */printf("please input the search name:\n");scanf("%s",s); /*输入待查找姓名*/i=find(t,n,s); /*调用find函数,得到一个整数*/if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("not found!\n");elseprint(t[i]); /*找到,调用显示函数显示记录*/clrscr();}/*显示指定的一条记录*/void print(ADDRESS temp){/* clrscr(); */printf("\n\n********************************************\n");printf("name|unit|telephone|product_company|designer|price|kucun|year|mont h|day\n");/*printf("------------------------------------------------\n"); */printf("%s/%s/%s/%s/%s/%s/%s/%s/%s/%s",,temp.units,temp.tele, temp.product_company,temp.designer,temp.price,temp.kucun,temp.year,tem p.month,temp.day);printf("**********************end***********************\n");}/*查找函数,参数为记录数组和记录条数以及姓名s */int find(ADDRESS t[],int n,char *s){int i;for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if(strcmp(s,t[i].name)==0) /*记录中的姓名和待比较的姓名是否相等*/return i; /*相等,则返回该记录的下标号,程序提前结结束*/}return i; /*返回i值*/}/*删除函数,参数为记录数组和记录条数*/int delete(ADDRESS t[],int n){char s[20]; /*要删除记录的姓名*/int ch=0;int i,j;printf("please deleted name\n"); /*提示信息*/scanf("%s",s);/*输入姓名*/i=find(t,n,s); /*调用find函数*/if(i>n-1) /*如果i>n-1超过了数组的长度*/printf("no found not deleted\n"); /*显示没找到要删除的记录*/ else{print(t[i]); /*调用输出函数显示该条记录信息*/printf("Are you sure delete it(1/0)\n"); /*确认是否要删除*/scanf("%d",&ch); /*输入一个整数0或1*/if(ch==1) /*如果确认删除整数为1*/{for(j=i+1;j<n;j++) /*删除该记录,实际后续记录前移*/{strcpy(t[j-1].name,t[j].name); /*将后一条记录的姓名拷贝到前一条*/strcpy(t[j-1].units,t[j].units); /*将后一条记录的单位拷贝到前一条*/strcpy(t[j-1].tele,t[j].tele); /*将后一条记录的电话拷贝到前一条*/strcpy(t[j-1].product_company,t[j].product_company);strcpy(t[j-1].designer,t[j].designer);strcpy(t[j-1].price,t[j].price);strcpy(t[j-1].kucun,t[j].kucun);strcpy(t[j-1].year,t[j].year);strcpy(t[j-1].month,t[j].month);strcpy(t[j-1].day,t[j].day);}n--; /*记录数减1*/}}return n; /*返回记录数*/}/*插入记录函数,参数为结构体数组和记录数*/int add(ADDRESS t[],int n)/*插入函数,参数为结构体数组和记录数*/{ADDRESS temp; /*新插入记录信息*/int i,j;char s[20],p; /*确定插入在哪个记录之前*/printf("please input the new record:\n");printf("************************************************\n");printf("name|unit|telephone|product_company|designer|price|kucun|year|mont h|day\n");/*printf("--------------------------------------------------\n");scanf("%s%s%s",,temp.units,temp.tele); *//* 输入插入信息*/ printf("name:"); /* 打印输出号码*/scanf("%s",&);/* 用数组输入号码*/printf("unit:"); /* 打印输出名字*/scanf("%s",&temp.units); /* 用数组输入姓名*/printf("telephone:");/* 打印输出性别*/scanf("%s",&temp.tele);/* 用数组输入性别*/printf("product_company:"); /* 打印输出生日*/scanf("%s",&temp.product_company); /* 用数组输入生日*/printf("designer:");/* 打印输出婚姻状况*/scanf("%s",&temp.designer);/* 用数组输入婚姻状况*/printf("price:");/* 打印输出工作状况*/scanf("%s",&temp.price);/* 用数组输入工作状况*/printf("kucun:");/* 打印输出工作状况*/scanf("%s",&temp.kucun);/* 用数组输入工作状况*/printf("produce year:");/* 打印输出工作状况*/scanf("%s",&temp.year);/* 用数组输入工作状况*/printf("produce month:");/* 打印输出工作状况*/scanf("%s",&temp.month);/* 用数组输入工作状况*/printf("produce day:");/* 打印输出工作状况*/scanf("%s",&temp.day);/* 用数组输入工作状况*/printf("-----------Ok!this record have been recorded!------------\n");printf("------------------------------------------------\n");K:printf("please input the wanted name's position to insert:\n");scanf("%s",s); /*输入插入位置的姓名*/i=find(t,n,s); /*调用find,确定插入位置*/if(i>n-1) /*如果i>n-1超过了数组的长度*/{printf("the name isn't exist!\n"); /*显示没找到要删除的记录*/printf("Are you want to continue to insert?Yes--y/No--any otherkey!\n");if(getch()=='y') goto K;}else{for(j=n-1;j>=i;j--) /*从最后一个结点开始向后移动一条*/{strcpy(t[j+1].name,t[j].name); /*当前记录的姓名拷贝到后一条*/strcpy(t[j+1].units,t[j].units); /*当前记录的单位拷贝到后一条*/strcpy(t[j+1].tele,t[j].tele); /*当前记录的电话拷贝到后一条*/strcpy(t[j+1].product_company,t[j].product_company);strcpy(t[j+1].designer,t[j].designer);strcpy(t[j+1].price,t[j].price);strcpy(t[j+1].kucun,t[j].kucun);strcpy(t[j+1].year,t[j].year);strcpy(t[j+1].month,t[j].month);strcpy(t[j+1].day,t[j].day);}strcpy(t[i].name,); /*将新插入记录的姓名拷贝到第i个位置*/strcpy(t[i].units,temp.units); /*将新插入记录的单位拷贝到第i个位置*/strcpy(t[i].tele,temp.tele); /*将新插入记录的电话拷贝到第i个位置*/strcpy(t[i].product_company,temp.product_company);strcpy(t[i].designer,temp.designer);strcpy(t[i].price,temp.price);strcpy(t[i].kucun,temp.kucun);strcpy(t[i].year,temp.year);strcpy(t[i].month,temp.month);strcpy(t[i].day,temp.day);n++; /*记录数加1*/return n; /*返回记录数*/}}/*保存函数,参数为结构体数组和记录数*/void save(ADDRESS t[],int n){int i;FILE *fp; /*指向文件的指针*/if((fp=fopen("record.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/{printf("can not open file\n");/*没打开*/exit(1); /*退出*/}printf("\nSaving file now!\n"); /*输出提示信息*/fprintf(fp,"there is %d records!",n); /*将记录数写入文件*/fprintf(fp,"\r\n"); /*将换行符号写入文件*/for(i=0;i<n;i++){fprintf(fp,"%s/%s/%s/%s/%s/%s/%s/%s/%s/%s",t[i].name,t[i].units,t[i].tele,t[i].p roduct_company,t[i].designer,t[i].price,t[i].kucun,t[i].year,t[i].month,t[i].day);/*格式写入记录*/fprintf(fp,"\r\n"); /*将换行符号写入文件*/}fclose(fp);/*关闭文件*/printf("****save success***\n"); /*显示保存成功*/}/*读入函数,参数为结构体数组*//* int load(ADDRESS t[]) *//* { *//* int i,n; *//* FILE *fp; *//*指向文件的指针*//* if((fp=fopen("record.txt","rb"))==NULL)*//* 打开文件*//* { *//* printf("can not open file\n"); *//*不能打开*//* exit(1); *//*退出*//* } *//* fscanf(fp,"%d",&n);*/ /*读入记录数*//* for(i=0;i<n;i++) *//* fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele); */ /*按格式读入记录*//* fclose(fp);*/ /*关闭文件*//* printf("You have success read data from file\n"); *//* 显示保存成功*/ /* return n;*/ /*返回记录数*//* } *//*按序号显示记录函数*/int modify_kucun(ADDRESS t[],int n){char s[20],ch[10]; /*保存待查找姓名字符串*/int i,j; /*保存查找到结点的序号*//*clrscr(); */printf("please input the cloth name which you wanted to modify its kucun:\n");scanf("%s",s); /*输入待查找姓名*/i=find(t,n,s); /*调用find函数,得到一个整数*/if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("sorry!the name don't exist!\n");else{print(t[i]); /*找到,调用显示函数显示记录*//*printf("Are you sure to modify its kucun?Yes--y/"); */printf("please input the new kucun you want:\n");scanf("%c",ch);for(j=0;j<10;j++)t[i].kucun[j]=ch[j];printf("Ok!the kucun has been modified!");}clrscr();}void display(ADDRESS t[]){int id,n;FILE *fp; /*指向文件的指针*/if((fp=fopen("record.txt","rb"))==NULL) /*打开文件*/{printf("can not open file\n"); /*不能打开文件*/exit(1); /*退出*/}printf("Enter order number:\n"); /*显示信息*/scanf("%d",&id); /*输入序号*/fscanf(fp,"%d",&n); /*从文件读入记录数*/if(id>=0&&id<n) /*判断序号是否在记录范围内*/{fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移动文件指针到该记录位置*/print(t[id]); /*调用输出函数显示该记录*/printf("\r\n");}elseprintf("no %d number record\n ",id); /*如果序号不合理显示信息*/fclose(fp); /*关闭文件*/}/*排序函数,参数为结构体数组和记录数*/void sort(ADDRESS t[],int n){int i,j,flag;char y;ADDRESS temp; /*临时变量做交换数据用*/R: printf("Please select which kind to sort!0--sort by kucun/1--sort by Chu_Chang_Ri_Qi\n "); /*选择何种方式排序*/if(getch()=='0'){for(i=0;i<n;i++){flag=0; /*设标志判断是否发生过交换*/for(j=0;j<n-1;j++)if((strcmp(t[j].kucun,t[j+1].kucun))>0) /*比较大小*/{flag=1;strcpy(,t[j].name); /*交换记录*/strcpy(temp.units,t[j].units);strcpy(temp.tele,t[j].tele);strcpy(temp.product_company,t[j].product_company);strcpy(temp.designer,t[j].designer);strcpy(temp.price,t[j].price);strcpy(temp.kucun,t[j].kucun);strcpy(temp.year,t[j].year);strcpy(temp.month,t[j].month);strcpy(temp.day,t[j].day);strcpy(t[j].name,t[j+1].name);strcpy(t[j].units,t[j+1].units);strcpy(t[j].tele,t[j+1].tele);strcpy(t[j].product_company,t[j+1].product_company);strcpy(t[j].designer,t[j+1].designer);strcpy(t[j].price,t[j+1].price);strcpy(t[j].kucun,t[j+1].kucun);strcpy(t[j].year,t[j+1].year);strcpy(t[j].month,t[j+1].month);strcpy(t[j].day,t[j+1].day);strcpy(t[j+1].name,);strcpy(t[j+1].units,temp.units);strcpy(t[j+1].tele,temp.tele);strcpy(t[j+1].product_company,temp.product_company);strcpy(t[j+1].designer,temp.designer);strcpy(t[j+1].price,temp.price);strcpy(t[j+1].kucun,temp.kucun);strcpy(t[j+1].year,temp.year);strcpy(t[j+1].month,temp.month);strcpy(t[j+1].day,temp.day);}if(flag==0) break; /*如果标志为0,说明没有发生过交换循环结束*/}printf("sort sucess\n"); /*显示排序成功*/}elseif(getch()=='1'){for(i=0;i<n;i++){flag=0; /*设标志判断是否发生过交换*/for(j=0;j<n-1;j++)/* if((()&&((strcmp(t[j].month,t[j+1].month))>0)))&&((strcmp(t[j].day,t[j+1].day))>0))||(((strcmp(t[j].year,t[j+1].year))=0)&&((strcmp(t[j].month,t[j+1].month))>0))||(((strcmp(t[j].year,t[j+1].year))=0)&&((strcmp(t[j].month,t[j+1].month))=0)&&((st rcmp(t[j].day,t[j+1].day))>0))) *//*比较大小*/if(( ((strcmp(t[j].year,t[j+1].year))>0)&&((strcmp(t[j].month,t[j+1].month))>0)&&( (strcmp(t[j].day,t[j+1].day))>0) )||( ((strcmp(t[j].year,t[j+1].year))==0)&&((strcmp(t[j].month,t[j+1].month))>0) )||( ((strcmp(t[j].year,t[j+1].year))==0)&&((strcmp(t[j].month,t[j+1].month))==0)&& ((strcmp(t[j].day,t[j+1].day))>0) )){flag=1;strcpy(,t[j].name); /*交换记录*/。
C语⾔实现家庭理财系统本⽂实例为⼤家分享了C语⾔实现家庭理财系统的具体代码,供⼤家参考,具体内容如下⽐较简单直接上代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>#include<time.h>#include<windows.h>int s=1;int b=1;struct Data{ int a;char name[25];char riqi[15];float money;char beizhu[50];};struct list //链表申请{struct Data info;struct list *next;};struct list *Inhead = NULL; //收⼊链表头指针struct list *Intail = NULL; //收⼊链表尾指针struct list *zhichuhead = NULL; //⽀出链表头指针struct list *zhichutail = NULL; //⽀出链表尾指针struct list *temp = NULL; //定义⼀个全局空指针⽅便后⾯引⽤int count=0;int count1=0;void inquire_income();void inquire_pay();void modify_income();void modify_pay();void time();void inquire_menu();void Add_income();void Del_income();void display_income();void inquire_menu();void full_name();void money();void content();void modify_menu();void full_name_modify_income();void time_modify_income();void money_modify_income();void content_modify_income();void Del_pay();void inquire_pay();void display_pay();void modify_pay();void Add_pay();void full_name_pay();void time_pay();void money_pay();void content_pay();void full_name_modify_pay();void time_modify_pay();void money_modify_pay();void content_modify_pay();void all_income();void all_pay();void ALLfund();void menu();void Save_income() //将收⼊数据存⼊⽂件{FILE *fp;fp=fopen("D:\\shouru.dat","wb");struct list *p = Inhead;while (p != NULL){fwrite(&p->info, sizeof(struct Data), 1, fp); //向⽂件写⼊内容p = p->next; //指向下⼀个节点}fclose(fp); //关闭⽂件}void Save_zhichu() //将⽀出数据存⼊⽂件{FILE *fp;fp = fopen("D:\\zhichu.dat","wb");struct list *p = zhichuhead;while (p != NULL){fwrite(&p->info, sizeof(struct Data), 1, fp);p = p->next;}fclose(fp);}void Open() //提前打开⽂件将已有的收⼊数据添加进来(如果没有直接跳过){FILE *pp;pp = fopen("D:\\shouru.dat", "rb");if(pp != NULL){struct Data linshi; //申请⼀个结构体while (fread(&linshi, sizeof(struct Data), 1, pp) == 1) //直到没有了为⽌{temp = (struct list*)malloc(sizeof(struct list)); //分配空间赋给temptemp->info = linshi; //将linshi地址赋给temp指向temp->next = NULL; //将指针指向空if (Inhead == NULL) //分为两种情况⼀种为空的时候⼀种不为空{Inhead = temp;Intail = temp; //因为第⼀个元素}else{Intail->next = temp; //添加到前尾部的后指针Intail = temp; //尾部指针}}fclose(pp);}}void Openzhichu() //提前打开⽂件将已有的⽀出数据添加进来(如果没有直接跳过){FILE *fp;fp = fopen("zhichu.dat","rb");if (fp != NULL){struct Data linshi;while (fread(&linshi, sizeof(struct Data), 1, fp) == 1){temp = (struct list*)malloc(sizeof(struct list));temp->info = linshi;temp->next = NULL;if (zhichuhead == NULL){zhichuhead = temp;zhichutail = temp;}else{zhichutail->next = temp;zhichutail = temp;};}fclose(fp);}}/*********************************************************************/ void Menu() //菜单主界⾯{system("cls"); //清屏printf("\n");printf("\n");printf("\n");printf("\n");printf("\t\t\t\t *****************************************\n");printf("\n");printf("\t\t\t\t * 欢迎使⽤家庭财务管理系统 *\n");printf("\n");printf("\t\t\t\t *****************************************\n");printf(" \n");printf("\t\t\t\t 1:收⼊操作 \n");printf("\t\t\t\t 2:⽀出操作 \n");printf("\t\t\t\t 3:统计操作 \n");printf("\t\t\t\t 0:退出 \n");}void menu(){system("cls"); //清屏printf("\n");printf("\n");printf("\n");printf("\n");printf("\t\t\t\t *****************************************\n");printf("\n");printf("\t\t\t\t * 欢迎使⽤家庭财务管理系统 *\n");printf("\n");printf("\t\t\t\t *****************************************\n");printf(" \n");}/*****************************收⼊区**********************************/ void Income_menu() //收⼊界⾯{system("cls");printf("\n");printf("\n");printf("\n");printf("\n");printf("\t\t\t\t *****************************************\n");printf(" \n");printf("\t\t\t\t * 欢迎使⽤家庭财务管理系统 * \n");printf(" \n");printf("\t\t\t\t *****************************************\n");printf(" \n");printf("\t\t\t\t 1.添加收⼊ \n");printf("\t\t\t\t 2.删除收⼊ \n");printf("\t\t\t\t 3.查询收⼊ \n");printf("\t\t\t\t 4.显⽰收⼊ \n");printf("\t\t\t\t 5.修改收⼊ \n");printf("\t\t\t\t 0.返回上⼀级 \n");}void Income() //进⼊收⼊界⾯{int choice;while (1){Income_menu(); //收⼊菜单显⽰printf("\t\t\t\t 请输⼊选择: ");scanf("%d", &choice);fflush(stdin); //等待if (choice == 0){printf("\t\t\t\t 返回上⼀级中...... ");system("PAUSE");break; }elseswitch (choice){case 1: Add_income(); Save_income(); break; //添加case 2: Del_income(); Save_income(); break; //删除case 3: inquire_income(); Save_income(); break; //查询case 4: display_income(); Save_income(); break; //显⽰case 5: modify_income(); Save_income(); break; //修改}}}void Add_income() //添加收⼊{char panduan;do{temp = (struct list*)malloc(sizeof(struct list));if(Inhead == NULL){s=1;}else{s=Intail->info.a+1;}temp->info.a=s;printf("\t\t\t\t 姓名: "); gets(temp->); fflush(stdin);printf("\t\t\t\t ⽇期( XX 年 XX ⽉ XX ⽇): "); gets(temp->info.riqi); fflush(stdin); printf("\t\t\t\t 收⼊: "); scanf("%f", &temp->info.money); fflush(stdin);printf("\t\t\t\t 备注: "); gets(temp->info.beizhu); fflush(stdin);printf("\n");temp->next = NULL; //将尾部变为空if (Inhead == NULL){Inhead = temp;Intail = temp;}else{Intail->next = temp;Intail = temp;}Save_income();do{printf("\t\t\t\t 是否 (Y/N) 继续添加信息:");panduan = getchar();fflush(stdin);if(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N'){printf("\t\t\t\t 输⼊错误!\n");}}while(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N'); } while (panduan == 'Y' || panduan == 'y');printf("\t\t\t\t 正在返回......");system("PAUSE");}void Del_income() //删除收⼊{char shanchu[20],panduan2;int t=0;struct list *p = NULL;struct list *m = NULL;struct list *n = NULL;p = Inhead;if(p==NULL){printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}else{part:if(t==0) printf("\t\t\t\t 请输⼊删除姓名: ");else{printf("\t\t\t\t 请重新输⼊删除姓名: ");}gets(shanchu);if (strcmp(Inhead->, shanchu) == 0){count++;while (Inhead != NULL && strcmp(Inhead->, shanchu) == 0){char ch;printf("\t\t\t\t 编号: "); printf("%d\n",Inhead->info.a);printf("\t\t\t\t 姓名: "); puts(Inhead->);printf("\t\t\t\t ⽇期: "); puts(Inhead->info.riqi);printf("\t\t\t\t 收⼊: "); printf("%.3f\n", Inhead->info.money);printf("\t\t\t\t 备注: "); puts(Inhead->info.beizhu);printf("\t\t\t\t 找到⼀个数据名字为%s,确认删除 Y/N ?", shanchu);ch = getchar(); fflush(stdin);if (ch == 'y' || ch == 'Y'){Inhead = Inhead->next;p = Inhead;while(p!=NULL){p->info.a=p->info.a-1;p=p->next;}}else {break;}}}else{if (strcmp(Intail->, shanchu) == 0){count++;do{m = p;p = p->next;} while (p != Intail);char ch2;printf("\t\t\t\t 编号: "); printf("%d\n",Intail->info.a);printf("\t\t\t\t 姓名: "); puts(Intail->);printf("\t\t\t\t ⽇期: "); puts(Intail->info.riqi);printf("\t\t\t\t 收⼊: "); printf("%.4f\n", Intail->info.money);printf("\t\t\t\t 备注: "); puts(Intail->info.beizhu);printf("\t\t\t\t 找到⼀个数据名字为%s,确认删除 Y/N ?", shanchu);ch2 = getchar(); fflush(stdin);if (ch2 == 'y' || ch2 == 'Y'){m->next = NULL;Intail=m;}}else{while( count>=3 && p->next != NULL && strcmp(p->, shanchu) != 0 ) {m = p;p = p->next;n = p->next;}if(count>=3 && strcmp(p->, shanchu) == 0){char ch3;printf("\t\t\t\t 编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 姓名: "); puts(p->);printf("\t\t\t\t ⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 收⼊: "); printf("%.3f\n", p->info.money);printf("\t\t\t\t 备注: "); puts(p->info.beizhu);printf("\t\t\t\t 找到⼀个数据名字为%s,确认删除 Y/N ?", shanchu);ch3 = getchar(); fflush(stdin);if (ch3 == 'y' || ch3 == 'Y')m->next = n;while(n!=NULL){n->info.a=n->info.a-1;n=n->next;}}else{printf("\t\t\t\t\t 不存在\n");if(t==0){t=1;goto part;}}}}Save_income();if (Inhead != NULL){char panduan;do{printf("\t\t\t\t 是否继续删除 (Y/N):");panduan = getchar();fflush(stdin);if (panduan == 'Y' || panduan == 'y'){Del_income();break;}else if(panduan=='n'||panduan=='N'){break;}else{printf("\t\t\t\t 输⼊错误!\n");}}while(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N'); }else{printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}}}void inquire_income() //查询收⼊{inquire_menu();int choice;printf("\t\t\t\t 请输⼊你的选择: ");scanf("%d", &choice);fflush(stdin);switch (choice){case 1: full_name(); break;case 2: time(); break;case 3: money(); break;case 4: content(); break;default: printf("\t\t\t\t 输⼊错误 "); break;}}void full_name() //通过名字查询收⼊{char chazhao[20];int j=0;if(Inhead==NULL){printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}else{printf("\t\t\t\t 请输⼊查询的名字: ");gets(chazhao);struct list *p = Inhead;while (p != NULL){if (strcmp(p->, chazhao) == 0) //循环遍历链表{printf("\t\t\t\t 编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 姓名: "); puts(p->);printf("\t\t\t\t ⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 收⼊: "); printf("%.3f\n", p->info.money);printf("\t\t\t\t 备注: "); puts(p->info.beizhu);j=1;}p = p->next; //到下⼀个节点的头}if(j==0){printf("\t\t\t\t 不存在\n ");}if (Inhead != NULL){char panduan;do { printf("\t\t\t\t 是否继续查询 (Y/N):");panduan = getchar();fflush(stdin); //清空输⼊缓冲区,为了确保不影响后⾯的数据读取if (panduan == 'Y' || panduan == 'y'){full_name();break;}else if(panduan=='n'||panduan=='N'){inquire_income(); break;}else{printf("\t\t\t\t 输⼊错误!\n");}}while(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N'); }else{printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}}}void time() //通过⽇期查询收⼊{char chazhao[20];int j=0;if(Inhead==NULL){printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}else{printf("\t\t\t\t 请输⼊查询的⽇期: ");gets(chazhao);struct list *p = Inhead;while (p != NULL){if (strcmp(p->info.riqi, chazhao) == 0){printf("\t\t\t\t 编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 姓名: "); puts(p->);printf("\t\t\t\t ⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 收⼊: "); printf("%.4f\n", p->info.money);printf("\t\t\t\t 备注: "); puts(p->info.beizhu);j=1;p = p->next;}if(j==0){printf("\t\t\t\t 不存在\n ");}if (Inhead != NULL){char panduan;do {printf("\t\t\t\t 是否继续查询 (Y/N):");panduan = getchar();fflush(stdin);if (panduan == 'Y' || panduan == 'y'){time() ; break;}else if(panduan=='n'||panduan=='N'){inquire_income();break;}else{printf("\t\t\t\t 输⼊错误!\n");}}while(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N'); }else{printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}}}void money() //通过⾦额查询收⼊{float chazhao;int j=0;if(Inhead==NULL){printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}else{printf("\t\t\t\t 请输⼊查询的⾦额:");scanf("%f", &chazhao);fflush(stdin);struct list *p = Inhead;while (p != NULL){if (p->info.money == chazhao){printf("\t\t\t\t 编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 姓名: "); puts(p->);printf("\t\t\t\t ⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 收⼊: "); printf("%.4f\n", p->info.money);printf("\t\t\t\t 备注: "); puts(p->info.beizhu);j=1;}p = p->next;}if(j==0){printf("\t\t\t\t 不存在\n ");}if (Inhead != NULL){char panduan;do{printf("\t\t\t\t 是否继续查询 (Y/N):");panduan = getchar();fflush(stdin);if (panduan == 'Y' || panduan == 'y'){money(); break;else if(panduan=='n'||panduan=='N'){inquire_income(); break;}else{printf("\t\t\t\t 输⼊错误!\n");}}while(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N'); }else{printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}}}void content() //通过备注查询收⼊{char chazhao[20];int j=0;if(Inhead==NULL){printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}else{printf("\t\t\t\t 请输⼊查询的备注:");gets(chazhao);struct list* p = Inhead;while (p != NULL){if (strcmp(p->info.beizhu, chazhao) == 0){printf("\t\t\t\t 编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 姓名: "); puts(p->);printf("\t\t\t\t ⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 收⼊: "); printf("%.4f\n", p->info.money);printf("\t\t\t\t 备注: "); puts(p->info.beizhu);j=1;}p = p->next;}if(j==0){printf("\t\t\t\t 不存在\n ");}if (Inhead != NULL){char panduan;do{printf("\t\t\t\t 是否继续查询 (Y/N):");panduan = getchar();fflush(stdin);if (panduan == 'Y' || panduan == 'y'){content();break;}else if(panduan=='n'||panduan=='N'){inquire_income(); break;}else{printf("\t\t\t\t 输⼊错误!\n");}}while(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N'); }else{printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}}}void display_income() //显⽰所有收⼊不包括⽀出{if(Inhead==NULL){printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}else{struct list* p = Inhead;while (p != NULL){ printf("\t\t\t\t==·==·==·==·==·==\n");printf("\t\t\t\t| 编号: "); printf("%12d|\n",p->info.a);printf("\t\t\t\t--------------------\n");printf("\t\t\t\t| 姓名: "); printf("%12s|\n",p->);printf("\t\t\t\t--------------------\n");printf("\t\t\t\t| ⽇期: "); printf("%12s|\n",p->info.riqi);printf("\t\t\t\t--------------------\n");printf("\t\t\t\t| 收⼊: "); printf("%12.4f|\n", p->info.money);printf("\t\t\t\t--------------------\n");printf("\t\t\t\t| 备注: "); printf("%12s|\n",p->info.beizhu);p = p->next;}system("PAUSE");}}void modify_income() //修改收⼊控制台{modify_menu();int choice;printf("\t\t\t\t 请输⼊你的选择: ");scanf("%d", &choice);fflush(stdin);switch (choice){case 1: full_name_modify_income(); break;case 2: time_modify_income(); break;case 3: money_modify_income(); break;case 4: content_modify_income(); break;default: printf("\t\t\t\t 输⼊错误 "); break;}}void full_name_modify_income() //通过名字修改收⼊{char xiugai[20];int j=0;if(Inhead==NULL){printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}else{printf("\t\t\t\t 请输⼊修改的名字: ");fflush(stdin);gets(xiugai);struct list *p = Inhead;while (p != NULL){if (strcmp(p->, xiugai) == 0){char ch2;fflush(stdin);printf("\n\t\t\t\t 原编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 原姓名: "); puts(p->);printf("\t\t\t\t 原⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 原收⼊: "); printf("%.4f\n", p->info.money);printf("\t\t\t\t 原备注: "); puts(p->info.beizhu);printf("\t\t\t\t 找到⼀个数据名字为%s,确认修改 Y/N ?", xiugai); ch2 = getchar(); fflush(stdin);if (ch2 == 'y' || ch2 == 'Y'){printf("\t\t\t\t 姓名: "); gets(p->); fflush(stdin);printf("\t\t\t\t ⽇期: "); gets(p->info.riqi); fflush(stdin);printf("\t\t\t\t 收⼊: "); scanf("%f", &p->info.money); fflush(stdin);printf("\t\t\t\t 备注: "); gets(p->info.beizhu); fflush(stdin);printf("\n\t\t\t\t 现编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 现姓名: "); puts(p->);printf("\t\t\t\t 现⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 现收⼊: "); printf("%.4f\n", p->info.money);printf("\t\t\t\t 现备注: "); puts(p->info.beizhu);}j=1;}p = p->next;}Save_income();if(j==0){printf("\t\t\t\t 不存在\n ");}if (Inhead != NULL){char panduan;do{printf("\t\t\t\t 是否继续修改 (Y/N):");panduan = getchar();fflush(stdin);if (panduan == 'Y' || panduan == 'y'){full_name_modify_income();break;}else if(panduan=='n'||panduan=='N'){modify_income(); break;}else{printf("\t\t\t\t 输⼊错误!\n");}}while(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N'); }else{printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}}}void time_modify_income() //通过⽇期修改收⼊{char xiugai[20];int j=0;if(Inhead==NULL){printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}else{printf("\t\t\t\t 请输⼊修改的⽇期: ");fflush(stdin);gets(xiugai);struct list *p = Inhead;while (p != NULL){if (strcmp(p->info.riqi, xiugai) == 0){char ch2;fflush(stdin);printf("\n\t\t\t\t 原编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 原姓名: "); puts(p->);printf("\t\t\t\t 原⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 原收⼊: "); printf("%.4f\n", p->info.money);printf("\t\t\t\t 原备注: "); puts(p->info.beizhu);printf("\t\t\t\t 找到⼀个数据⽇期为%s,确认修改 Y/N ?", xiugai);ch2 = getchar(); fflush(stdin);if (ch2 == 'y' || ch2 == 'Y'){printf("\t\t\t\t 姓名: "); gets(p->); fflush(stdin);printf("\t\t\t\t ⽇期: "); gets(p->info.riqi); fflush(stdin);printf("\t\t\t\t 收⼊: "); scanf("%f", &p->info.money); fflush(stdin);printf("\t\t\t\t 备注: "); gets(p->info.beizhu); fflush(stdin);printf("\n\t\t\t\t 现编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 现姓名: "); puts(p->);printf("\t\t\t\t 现⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 现收⼊: "); printf("%.4f\n", p->info.money);printf("\t\t\t\t 现备注: "); puts(p->info.beizhu);}j=1;}p = p->next;}Save_income();if(j==0){printf("\t\t\t\t 不存在\n ");}if (Inhead != NULL){char panduan;do{printf("\t\t\t\t 是否继续修改 (Y/N):");panduan = getchar();fflush(stdin);if (panduan == 'Y' || panduan == 'y'){time_modify_income();break;}else if(panduan=='n'||panduan=='N'){modify_income(); break;}else{printf("\t\t\t\t 输⼊错误!\n");}}while(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N'); }else{printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}}}void money_modify_income() //通过⾦额修改收⼊{float xiugai;int j=0;if(Inhead==NULL){printf("\t\t\t\t 空列表\n");printf("\t\t\t\t 请返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}else{printf("\t\t\t\t 请输⼊修改的⾦额:");scanf("%f", &xiugai);fflush(stdin);struct list *p = Inhead;while (p != NULL){if (p->info.money == xiugai){char ch2;fflush(stdin);printf("\n\t\t\t\t 原编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 原姓名: "); puts(p->);printf("\t\t\t\t 原⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 原收⼊: "); printf("%.4f\n", p->info.money);printf("\t\t\t\t 原备注: "); puts(p->info.beizhu);printf("\t\t\t\t 找到⼀个数据⾦额为%f,确认修改 Y/N ?", xiugai);ch2 = getchar(); fflush(stdin);if (ch2 == 'y' || ch2 == 'Y'){printf("\t\t\t\t 姓名: "); gets(p->); fflush(stdin);printf("\t\t\t\t ⽇期: "); gets(p->info.riqi); fflush(stdin);printf("\t\t\t\t 收⼊: "); scanf("%f", &p->info.money); fflush(stdin);printf("\t\t\t\t 备注: "); gets(p->info.beizhu); fflush(stdin);printf("\n\t\t\t\t 现编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 现姓名: "); puts(p->);printf("\t\t\t\t 现⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 现收⼊: "); printf("%.4f\n", p->info.money);printf("\t\t\t\t 现备注: "); puts(p->info.beizhu);}j=1;}p = p->next;}Save_income();if(j==0){printf("\t\t\t\t 不存在\n ");}if (Inhead != NULL){char panduan;do{printf("\t\t\t\t 是否继续修改 (Y/N):");panduan = getchar();fflush(stdin);if (panduan == 'Y' || panduan == 'y'){money_modify_income();break;}else if(panduan=='n'||panduan=='N'){modify_income(); break;}else{printf("\t\t\t\t 输⼊错误!\n");}}while(panduan != 'Y'&& panduan != 'y'&&panduan != 'n' && panduan != 'N'); }else{printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}}}void content_modify_income() //通过备注修改收⼊{char xiugai[20];int j=0;if(Inhead==NULL){printf("\t\t\t\t ⽬前为空列表!\n");printf("\t\t\t\t 即将返回收⼊操作界⾯进⾏添加\n");printf("\t\t\t\t 正在返回......");system("PAUSE");}else{printf("\t\t\t\t 请输⼊修改的备注: ");fflush(stdin);gets(xiugai);struct list* p = Inhead;while (p != NULL){if (strcmp(p->info.beizhu, xiugai) == 0){char ch2;fflush(stdin);printf("\n\t\t\t\t 原编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 原姓名: "); puts(p->);printf("\t\t\t\t 原⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 原收⼊: "); printf("%.4f\n", p->info.money);printf("\t\t\t\t 原备注: "); puts(p->info.beizhu);printf("\t\t\t\t 找到⼀个数据备注为%s,确认修改 Y/N ?", xiugai);ch2 = getchar(); fflush(stdin);if (ch2 == 'y' || ch2 == 'Y'){printf("\t\t\t\t 姓名: "); gets(p->); fflush(stdin);printf("\t\t\t\t ⽇期: "); gets(p->info.riqi); fflush(stdin);printf("\t\t\t\t 收⼊: "); scanf("%f", &p->info.money); fflush(stdin);printf("\t\t\t\t 备注: "); gets(p->info.beizhu); fflush(stdin);printf("\n\t\t\t\t 现编号: "); printf("%d\n",p->info.a);printf("\t\t\t\t 现姓名: "); puts(p->);printf("\t\t\t\t 现⽇期: "); puts(p->info.riqi);printf("\t\t\t\t 现收⼊: "); printf("%.4f\n", p->info.money);printf("\t\t\t\t 现备注: "); puts(p->info.beizhu);}j=1;}p = p->next;}Save_income();if(j==0){printf("\t\t\t\t 不存在\n ");}if (Inhead != NULL){char panduan;do{printf("\t\t\t\t 是否继续修改 (Y/N):");panduan = getchar();fflush(stdin);if (panduan == 'Y' || panduan == 'y'){content_modify_income();break;}else if(panduan=='n'||panduan=='N'){modify_income(); break;}。
教师工资系统VF程序源代码及其说明程序源代码及其说明1、登陆界面实现代码及截图1.1核心代码void CLogInDlg::OnOK(){// TODO: Add extra validation hereUpdateData(TRUE);if(m_usrName == ""){AfxMessageBox("用户账号不能为空!");return;}if(m_usrPasswd == ""){AfxMessageBox("用户密码不能为空!");return;}CDatabase db;CString sql;db.Open(NULL,FALSE,FALSE,"ODBC;DSN=salaryDB;UID=zha ng,PWD=NULL");ClogInSet* pset = new ClogInSet(&db);sql.Format("select * fromlogin where ID=\\'%s\\' and passwd=\\'%s\\'",m_usrName,m_usrPasswd);pset->Open(AFX_DB_USE_DEFAULT_TYPE,sql);if(m_usrName != pset->m_ID || m_usrPasswd != pset->m_passwd){AfxMessageBox("用户账号或密码错误!");return;}CDialog::OnOK();}1.2 登陆界面2、工资查询实现代码及截图2.1 核心代码void CpaySearch::OnQuery(){// TODO: Add your control notification handler code here CDatabase db;CString sql;db.Open(NULL,FALSE,FALSE,"ODBC;DSN=salaryDB;UID=zha ng,PWD=NULL");Csalaryset* pset = new Csalaryset(&db);int i=0;CString str;CString ty,tm,td;m_years.GetWindowText(ty);m_months.GetWindowText(tm);m_departments.GetWindowText(td);// str.Format("%d",m_years.GetCurSel());// AfxMessageBox(str);if(radioSel == 0){if(m_years.GetCurSel() == 0){m_departments.GetCurSel() != 0)sql.Format("select * from searchSalary where dept=\\'%s\\'",td);elseif(m_months.GetCurSel() != 0 && m_departments.GetCurSel() == 0)sql.Format("select * from searchSalary where month=\\'%s\\'",tm);elseif(m_months.GetCurSel() != 0 && m_departments.GetCurSel() != 0)sql.Format("select * from searchSalary where dept=\\'%s\\' and month=\\'%s\\'",td,tm);elsesql.Format("select * from searchSalary");}else// if(m_years.GetCurSel() != 0){if(m_months.GetCurSel() == 0 && m_departments.GetCurSel() != 0)sql.Format("select * from searchSalary where dept=\\'%s\\' and year=\\'%s\\'",td,ty);elseif(m_months.GetCurSel() != 0 && m_departments.GetCurSel() == 0)sql.Format("select * from searchSalary where month=\\'%s\\' and year=\\'%s\\'",tm,ty);elsem_departments.GetCurSel() != 0)sql.Format("select * from searchSalary where year=\\'%s\\' and month=\\'%s\\' and dept=\\'%s\\'",ty,tm,td);elsesql.Format("select * from searchSalary where year=\\'%s\\'",ty);}}else{UpdateData(TRUE);if(m_years.GetCurSel() == 0){if(m_months.GetCurSel() == 0 && m_departments.GetCurSel() != 0)sql.Format("select * from searchSalary where ID=\\'%s\\' and dept=\\'%s\\'",m_ID,td);elseif(m_months.GetCurSel() != 0 && m_departments.GetCurSel() == 0)sql.Format("select * from searchSalary where ID=\\'%s\\' and month=\\'%s\\'",m_ID,tm);elseif(m_months.GetCurSel() != 0 && m_departments.GetCurSel() != 0)sql.Format("select * from searchSalary where ID=\\'%s\\' anddept=\\'%s\\' and month=\\'%s\\'",m_ID,td,tm);elsesql.Format("select * from searchSalary where ID=\\'%s\\'",m_ID);}else// if(m_years.GetCurSel() != 0){if(m_months.GetCurSel() == 0 && m_departments.GetCurSel() != 0)sql.Format("select * from searchSalary where ID=\\'%s\\' and dept=\\'%s\\' and year=\\'%s\\'",m_ID,td,ty);elseif(m_months.GetCurSel() != 0 && m_departments.GetCurSel() == 0)sql.Format("select * from searchSalary where ID=\\'%s\\' and month=\\'%s\\' and year=\\'%s\\'",m_ID,tm,ty);elseif(m_months.GetCurSel() != 0 && m_departments.GetCurSel() != 0)sql.Format("select * from searchSalary where ID=\\'%s\\' and year=\\'%s\\' and month=\\'%s\\' and dept=\\'%s\\'", m_ID,ty,tm,td);elsesql.Format("select * from searchSalary where ID=\\'%s\\' and year=\\'%s\\'",m_ID,ty);}UpdateData(FALSE);}// sql.Format("select * from searchSalary"); AfxMessageBox(sql);m_printList.DeleteAllItems();pset->Open(AFX_DB_USE_DEFAULT_TYPE,sql); if(pset->GetRecordCount() == 0){delete pset;return;}while(!pset->IsEOF()){str.Format("%s",pset->m_ID);m_printList.InsertItem(i,str);str.Format("%s",pset->m_name);m_printList.SetItemText(i,name,str);str.Format("%s",pset->m_dept);m_printList.SetItemText(i,department,str); str.Format("%s",pset->m_position);m_printList.SetItemText(i,position,str);str.Format("%.2f",pset->m_allowance);m_printList.SetItemText(i,allowance,str);str.Format("%.2f",pset->m_salary);m_printList.SetItemText(i,salary,str);str.Format("%.2f",pset->m_reward);m_printList.SetItemText(i,reward,str);str.Format("%d",pset->m_year);m_printList.SetItemText(i,year,str);str.Format("%d",pset->m_month);m_printList.SetItemText(i,month,str);i++;pset->MoveNext();}db.Close();delete pset;}2.2 查询界面3、教职工基本信息添加实现代码及截图3.1核心代码void CWorkersInfo::OnModify(){// TODO: Add your control notification handler code here int count = m_wkrsInfo.GetItemCount();try{CDatabase db;CString sql;db.Open(NULL,FALSE,FALSE,"ODBC;DSN=salaryDB;UID=zha ng,PWD=NULL");CsysSet *sset = new CsysSet(&db);double al = 0;double sal = 0;// CcheckOnSet *cset = new CcheckOnSet(&db);CTime times = CTime::GetCurrentTime();int year=times.GetYear();int month=times.GetMonth();/* sql.Format("%d",count);AfxMessageBox(sql);sql.Format("%d-%d",year,month);AfxMessageBox(sql);*/CString ID,Name,Pos,Title,Dept,Phone;for(int i = 0;i < count;i++){ID = m_wkrsInfo.GetItemText(i,id);Name = m_wkrsInfo.GetItemText(i,name);Pos = m_wkrsInfo.GetItemText(i,position);Title = m_wkrsInfo.GetItemText(i,title);Dept = m_wkrsInfo.GetItemText(i,department);Phone = m_wkrsInfo.GetItemText(i,phone);/*sql.Format("%s,%s,%s,%s,%s,%s",ID,Name,Pos,Title,Dept,Phone);AfxMessageBox(sql);// Print the sql statement for check.*///-------Add to baseInfo table.-------sql.Format("insert into baseInfo (ID,name,position,title,dept,phone) values (\\'%s\\',\\'%s\\',\\'%s\\',\\'%s\\',\\'%s\\',\\'%s\\')",ID,Name,Pos,Title,Dept,Phone);db.ExecuteSQL(sql);//-------Add to attend table.-------sql.Format("insert into attend (ID,name,attendedTime,extraHours) values (\\'%s\\',\\'%s\\',0,0)",ID,Name);db.ExecuteSQL(sql);//-------Add to searchSalary table.-------/*Get position default salary from table sysSet.*/sql.Format("select * from sysSet where position=\\'%s\\'",Pos);sset->Open(AFX_DB_USE_DEFAULT_TYPE,sql);sal = sset->m_salary;al = sset->m_pAllowance;sql.Format("%.2f",sal);/* AfxMessageBox(sql); // Print the sql statement for check. */sset->Close(); //Close is needed.sql.Format("insert into searchSalary (ID,name,dept,position,allowance,salary,reward,year,month) values(\\'%s\\',\\'%s\\',\\'%s\\',\\'%s\\',\\'%.2f\\',\\'%.2f\\',0,\\'%d\\ ',\\'%d\\')",ID,Name,Dept,Pos,al,sal,year,month);db.ExecuteSQL(sql);}db.Close();}catch(CDBException e){CString err;err.Format("数据库操作错误!");AfxMessageBox(err);}}3.2 教职工信息查询界面4、系统设置实现代码和截图4.1确定修改系统设置实现代码void CSystemSetting::OnConfirm(){// TODO: Add your control notification handler code hereCDatabase db;CString sql,sql1,sql2,sql3,sql4,sql5;sql.Format("select * from sysSet");db.Open(NULL,FALSE,FALSE,"ODBC;DSN=salaryDB;UID=zha ng,PWD=NULL");CsysSet *pset = new CsysSet(&db);pset->Open(AFX_DB_USE_DEFAULT_TYPE,sql);m_1_1 = pset->m_salary;m_1_2 = pset->m_aAllowance;m_1_3 = pset->m_pAllowance;m_1_4 = pset->m_tAllowance;pset->MoveNext();m_2_1 = pset->m_salary;m_2_2 = pset->m_aAllowance;m_2_3 = pset->m_pAllowance;m_2_4 = pset->m_tAllowance;pset->MoveNext();m_3_1 = pset->m_salary;m_3_2 = pset->m_aAllowance;m_3_3 = pset->m_pAllowance;m_3_4 = pset->m_tAllowance;pset->MoveNext();m_4_1 = pset->m_salary;m_4_2 = pset->m_aAllowance;m_4_3 = pset->m_pAllowance;m_4_4 = pset->m_tAllowance;pset->MoveNext();m_5_1 = pset->m_salary;m_5_2 = pset->m_aAllowance;m_5_3 = pset->m_pAllowance;m_5_4 = pset->m_tAllowance;pset->MoveFirst();UpdateData(TRUE);sql1.Format("update sysSet set salary=\\'%.1f\\',aAllowance=\\'%.1f\\',pAllowance=\\'%.1f\\',tA llowance=\\'%.1f\\' where SID=0001", m_1_1,m_1_2,m_1_3,m_1_4);sql2.Format("update sysSet set salary=\\'%.1f\\',aAllowance=\\'%.1f\\',pAllowance=\\'%.1f\\',tA llowance=\\'%.1f\\' where SID=0002", m_2_1,m_2_2,m_2_3,m_2_4);sql3.Format("update sysSet set salary=\\'%.1f\\',aAllowance=\\'%.1f\\',pAllowance=\\'%.1f\\',tA llowance=\\'%.1f\\' where SID=0003", m_3_1,m_3_2,m_3_3,m_3_4);sql4.Format("update sysSet set salary=\\'%.1f\\',aAllowance=\\'%.1f\\',pAllowance=\\'%.1f\\',tA llowance=\\'%.1f\\' where SID=0004", m_4_1,m_4_2,m_4_3,m_4_4);sql5.Format("update sysSet set salary=\\'%.1f\\',aAllowance=\\'%.1f\\',pAllowance=\\'%.1f\\',tA llowance=\\'%.1f\\' where SID=0005", m_5_1,m_5_2,m_5_3,m_5_4);db.ExecuteSQL(sql1);db.ExecuteSQL(sql2);db.ExecuteSQL(sql3);db.ExecuteSQL(sql4);db.ExecuteSQL(sql5);db.Close();}4.2删除教职工信息功能实现代码void CSystemSetting::OnDelete(){// TODO: Add your control notification handler code hereUpdateData(TRUE);if(m_delete==""){AfxMessageBox("请输入教职工编号!");return;}Calert *dlg = new Calert();if(dlg->DoModal()==IDOK){CString sql;CDatabase db;sql.Format("delete from baseInfo where ID=\\'%s\\'",m_delete);db.Open(NULL,FALSE,FALSE,"ODBC;DSN=salaryDB;UID=zha ng,PWD=NULL");db.ExecuteSQL(sql);db.Close();}}。