作者: male110 日期: 2006-11-25 20:12:21 下载完整程序 需求分析 家庭财务系统主要对家庭的各项财务收支管理进行在计算机上的信息存储和处理,从而简化用户的工作量。在需求分过程中,概括描述了本软件能够为用户提供哪些服务、系统功能的整体框架,以及相应的业务流程。 系统概述 家庭财务管理系统应用软件给家庭成员提供了一个在Windows操作系统上运行的管理平台,家庭成可以对其成员编号、姓名以及收入、支出构成进行增加、删除、修改等管理操作。同时该系统还提供了家庭成员管理功能,根据家庭成员的分类,其拥有的权限也不同,系统可以判断登录家庭成员管理功能,根据家庭成员的分类,其拥有的权限也不同,系统可以判断登录家庭成员的用户名和密码,从而判断其是否可以使用该系统。系统亦可获取登录家庭成员的权限信息,从而判断该家庭成员能够使用该系统的哪些特定功能,不同级别的家庭成员之间不能够越权使用系统功能。家庭成员分为家长和普通成员两类。 功能需求描述 家庭财务管理系统软件是为用户进行家庭成员的收支构成及信息管理进行辅助的应用软件、功能需求描述如下。 ①用户登录:系统获取的家庭成员用户名和密码判断该家庭成员能否成功登录系统,并且当用户登录后根据权限判断该家庭成员是家长还是普能成员,可以使用哪些对庆的功能。普通级别的用户只有浏览等权限而不能进行实质性的改动。 ②给家庭成员提供功能选择界面:不同级别的家庭成员对应不同的功能选择界面.功能选择界面包括输入功能选项、调用相应程序两大需求。管理员和普通用户对应的功能选择界面是不同的。 ③创建收支信息文件:用户根据提示输入家庭成员的序号、姓名、各项财务信息,如收入、支出、合计。可一次性输入多条家庭成员的收支信息记录。系统将家庭成员收信息记录存储在系统磁盘的文件中,以便进行管理、查找和备份。 ④增加家庭成员收支信息:可在原有收支信息文件的基础上增加新的家庭成员财务信息记录,并继续保存至磁盘,并且将增加后的文件存储状况显示给用户。在增加新家庭成员收支记录的过程中,系统提示用户输入收、支出两个财务构成项,最终合计,要求系统处动计算获得,并同样作为财务构成项存入文件中对应的记录中。 ⑤删除家庭成员收支信息:提示用户输入要进行删除操作的家庭成员序号,如果在文件中有该家庭成员的收支信息存在,则将该序号所对应的姓名、序号、各种收入构成等在对应文件中加以删除。由系统提示是否继续进行删除操作,让家长可多次进行删除操作。 ⑥修改家庭成员收支信息:提示用户输入要进行修改操作的家庭成员序号,如果在文件中有该家庭成员的收支信息存在,则提示用户输入该序号对应的家庭成姓名、收入和支出构成等需要修改的选项,并将修改结果存储于文件。该部分需求也需要提示用户选择是否继续进行修改操作。修改操作中的合计部分,也需要有系统根据修改后的收、支出项目自动计算修改后的合计财务数额,并连同用户输入的其他修改项一起存入磁盘文件中。 ⑦查询家庭成员财务情况:分为根据姓名查询和根据序号查询两个具体需求,分别提示用户输入要查询家庭成信息的序号或姓名,如果在磁盘文件中有对应的家庭成员财务信息,则提示用户已找到,并逐项列出对应家庭成员的收支状况。在该功能中,也需提示用户是否需要继续查找,如不再继续查找,则返回主界面。 ⑧家庭成员收支排行浏览:该项需求要求根据家庭成员的合计项进行排行,以便用户对家庭成员收状况有较为直观的了解。 ⑨家庭成员管理:家长对普通家庭成员的管理也需要进行家庭成员的创建、增加、删除、修改和浏览。家长创建的家庭成员记录存储在名为yonghu的磁盘文件中,每当有家庭成员登录系统时,系统都会根据该文件中的用户名和密码进行核实判断,用户才能够顺得登录。家长还具有增加新家庭成员的功能。新增家庭成员的登录名及密码、权限等也被继续存储在yonghu文件中。当某些家庭成员不再使用系统时,还可进行删除操作,并且家长具有修改家庭成员权限的功能。 总体设计 对本系统的功能模块、运行环境等进行了合理分析之后。下面要从系统总体结构、模块功能、界面和数据结构几方面进行系统的总体设计。总体设计可在软件开发的早期站在全局高度对软件结构进行优化,这个时期付出的代价不高,却可以使软件质量得到重大改进。 开发与设计的总体思想 本系统的总体思想基于结构化的程序设计。应用高级语言程序设计中的基本控制结构,如循环和选择,着重实现管理系统的增、删、改、查等典型的管理功能由于主要实现的是管理系统的增、删、改、查等典型功能。在软件开发过程中应用了软件工程的基本理论。因此,系统的设计方法是结构化设计方法,开发手段是C语言,在WinTC环境下开发。 系统模块结构图 依据需求分析结果,家庭财务管理系统可以分为4个模块:用户登录模块、家庭成员财务管理模块、用户管理模块、功能选择模块。如图所示。 模块设计 1、家庭成员登录模块 提示用户输入登录名和密码,调用文件中存储的用户信息进行校验,只有当用户名和密码相匹配时,才允许用户使用该系统。用户登录系统后能够允许使用的系统功能和用户的权限有关。普通家庭成员只能进行查询和浏览,家长还可以进行增、删、改操作和对普通家庭成员的管理。权限的设置在家庭成员信息文件中进行限制,权限的判定在家庭成员登录模块进行。模块功能树如图所示 2、家庭成员财务管理模块 当用户成功登入系统时,即可根据权限不同,调用家庭成员财务管理模块中的部分或全部子功能。家庭成员财务管理模块的主要功能包括如下几个部分。 ①创建收支信息文件:提示家庭成员输入保存家庭成员收支信息记录的文件名,在磁盘上创建该文件,继续提示用户逐条输入家庭成员收支信息记录,每条记录包括家成员编号、姓名和收入、支出。其中家庭成员财务合计项由系统自动计算获得,计算公式为:合计=收入+支出。该功能可连续输入若干条家庭成员记录,输入家庭成员号为0时则停止输入。 ②增加收支信息:同上。 ③删除收支信息:提示家长输入要进行删除的文件名及家庭成员号码,如在文件中找到要删除的家庭成员记录,则将该家庭成员的对应信息从文件中删除,否则提示用户文件中没有相匹配的家庭成员,让用户选择是否继续进行操作。 ④修改收支信息:提示家长输入要进行修改的文件名及家庭成员号,如果存在有对应记录,则获取家长输入的要修改的家庭成员姓名、收支构成等主要内容。合计部分同样由系统自动计算获得,并自动赋值给相应家庭成员的合计项。 ⑤查询收支信息:可根据成员姓名和编号两种方式进行查询,若有查询结果,则向用户显示相应查询结果的家庭成员号、姓名、收入构成等各项内容,并可让用户选择是否继续查找。 ⑥家庭成员收支排行浏览:提示用户输入要浏览的文件名,根据家庭成员财务合计项进行降序排行,将排行结果列表显示给用户。 模块功能树如图所示 3、家庭成员管理模块 家庭成员管理模块实现对家庭财务管理系统的使用者的用户名、密码、权限的管理,以便家庭成员登录模块进行校验和权限判断。只有家长能够使用家庭成员管理模块的各项功能。该模块有如下5个子功能。 ①创建家庭成员信息文件:创建文件存储家庭成员各项信息,将家庭成员的各项信息存入磁盘上名为yonghu的文件中,以便用户登录模块校验判断。 ②增加新家庭成员:家长登录后可选增加新家庭成员功能,将新登录名、密码、权限等各项信息追加至yonghu文件。 ③删除家庭成员:家长登录后可选择输入要删除的家庭成员编号,将该家庭成员的相关信息从yonghu文件中删除,今后该用户则无法在继续登录系统。 ④修改家庭成员:家长登录后选择修改家庭成员功能,则输入要修改的家庭成员编号,继续按照系统提示输入要修改的成员姓名、密码、及权限,使得该家庭成员再次登入系统时要符合家长修改后的信息方可登录。 ⑤浏览家庭成员信息:将yonghu文件中存储的家庭成员信息按成员编号排序显示给家长,以便家长对各个用户进行管理操作。 家庭成员管理模块功能树如图所示。 4、功能选择 提供给不同权限的家庭成员相应的功能选择界面,在该模块中获取用户输入的功能选项,并调用相应的功能模块。功能选择模块的功能树如图所示。 系统流程描述 系统流程图如图所示。 界面设计 家庭财务管理系统的界面设计主要遵循方便易用、界面友好的原则,具体设计如下。 1、家庭成员登录界面设计 ①家庭成员登录界面是用户与系统第一步进行交互的接口,在家庭成员输入登录名和密码时都给以清晰的提示,当用户误操作或忘记密码时提示用户重新输入。 ②同时考虑到用户登录的安全性,因此用户在使用系统时输入的密码采用不回显的方式从屏幕获取用户输入的字符,因此,用户输入密码时不会被别人从旁窃取。 ③当用户输入的用户名与密码相符,则会提示用户登录成功,并通过程序处理告知用户所拥有权限是管理员(Administrator)还是普通用户(user)。 ④根据不同的用户权限,调用相应的管理功能选择界面。 功能选择界面的设计 ①家长的功能主要包括家庭成员财务信息管理和家庭成员管理两大部分,并且这两部分的操作大致类似,使得界面友好易用。 ②普通家庭成员使用该系统主要进行收入查询,浏览操作,功能较为简单,界面也应简洁易读。 具体设计如下图所示。 3、执行结果界面设计 由于C语言对图形化界面的支持比较有限,因此,对于该管理系统,首要考虑的是执结果的清晰易读。对于此类的界面设计要采用C语言自带的打印函数进行简单处理,将执行结果用列表的方式清晰显示结用户。 数据结构的设计 1、常量定义 #define SIZE 100 在排序浏览、删除、修改等功能模块中该常量用于定义数组长度。程序先把要排序或删除、修改的文件中的每条记录存放在数组当中,然后用特定的算法对该数组中的家庭成员信息进行排序、删除、修改等操作。C语言中的数组长度是固定的,并且必须在声明时指定数组的长度,因此用SIZE常量定义该数组的长度,由于财务信息文件的信息量较大,因此定义大小为100,并可根据需要进行简单更改。 2、家庭成员收入信息数据结构 用于存放每个家庭成员的序号、姓名、收入、支出、合计方面信息。 typedef struct { long Number;/*Field of number*/ char Name[20];/*Field of name*/ float in;/*Field of in*/ float out;/*Field of out*/ float sum;/*Field of sum*/ }money; 由于序号、姓名、收入构成用于描述一个有机整体——家庭成员,为了表明这些字段不是孤立的,而是共同描述一个完整的事物,因此用结构体这种形式来体现。 3、登录用户信息数据结构 用户描述登录系统的用户序号、用户名、密码和权限信息。 typedef struct { long Number; /* 家庭成员的序号 */ char Name[20];/* 家庭成员的名称 */ char ps[8]; /* 家庭成员密码 */ int power; /* 家庭成员权限 */ }user; 详细设计 基于系统需求分析与系统总体设计的结论,本系统采用C语言实各模块的功能,下面按照模块的划分来分别阐述系统的详细设计和实现过程。 家庭成员登录模块 1、模块描述 提供用户登录验证功能,当运行家庭财务管理系统时,系统提示用户输入登录名,并用不回显的方式输入密码,由系统提取磁盘上名为yonghu的文件验证用户名密码是否正确,并提供重新输入用户名和密码的选择功能。当用户成功登录时,系统通过判断用户权限(user结构体中的power变量),显示给用户相应的功能选择界面。当用户名和密码不匹配时,提示家庭成员重新登录或退出。 2、源文件定义 源文件:login.c 头文件:user.h 3、函数声明 main()函数 功能:进入家庭成员登录界面,验证用户名和密码,判断用户权根,使家庭成员进入相应的功能选择界面。 输入:用户名、密码。 处理: ①接收家庭成员输入的用户名和密码,存放在相应变量中进行判断。 ②判断用户名和密码是否相符,如果相符,则获得该家庭成员权限。 ③判断该用户权限是家长还是普通家庭成员,并调用相应功能选择界面。 ④如果用户名和密码不符,提示用户选择重新输入或退出系统。 输出: ①家庭成员登录成功或失败的信息 ②成功登录家庭成员权限 ③对应当前登录的家庭成员权限的功能选择界面 程序清单:(1)login.c /* login.h用户登陆,判断登录名、密码、权限,根据权限调用相应功能选择界面 包含用户信息头文件 包含管理员、普通用户的功能选择界面*/ #include "stdio.h" #include "admin.c" #include "guest.c" void main() { FILE * fp=NULL; user Show; user TempS; char DataFile[10]="yonghu";/* 存放用户文件 */ int i; char relogin; /* 是否重新登录 */ int success=0; /* 登录成功的标志 */ printf("#===================================================#\n"); printf("# Welcome to the Family Management System #\n"); printf("#===================================================#\n"); again: /* 输入用户名 */ printf("Please enter the user name:"); scanf("%s",TempS.Name); TempS.Name[19]=‘\0‘; /* 输入密码 */ printf("Please enter the password:"); fflush(stdin); for(i=0;i<7;i++) { TempS.ps[i]=getch(); TempS.ps[i+1]=‘\0‘;/* 字符要以‘\0‘结尾 */ if(TempS.ps[i]==‘\b‘) { i--; TempS.ps[i]=‘\0‘;/* 清除前一个字会 */ i--;/* 接收前一个字符 */ printf("\b "); printf("\b"); continue; } if(TempS.ps[i]==‘\r‘) { TempS.ps[i]=‘\0‘; break; } printf("*"); } fp=fopen(DataFile,"rb"); if(fp==NULL) /* 打开文件失败时提示 */ { printf("\nOpen file %s fail!End with any key\n",DataFile); perror("Open file fail"); getch(); return; } while(fread(&Show,sizeof(user),1,fp)!=(int)NULL) { if(strcmp(TempS.Name,Show.Name)==0&&strcmp(TempS.ps,Show.ps)==0) { printf("\nlogin successful!\n"); success=1; break; } } fclose(fp); if(success==1) /* 登录成功 */ { if(Show.power==1) { Admin(Show);/*家长(管理员)功能的界面*/ } else { Guest(Show); } }/* 未登录成功 */ else { fflush(stdin);/* 清楚输入缓冲区中的字符 */ printf("\nError user name or password!input again(y/n):"); relogin=getchar(); if(relogin==‘y‘||relogin==‘Y‘) { goto again; } else { printf("End program!"); getch(); exit(0); } } } (以后将只给出函数说明) 家庭成员财务管理模块 1、模块描述 对若干家庭成员收入记录进行创建家庭成员财务收支信息文件、增加财务收支信息、删除财务收支信息、修改收支信息、查询收支信息和家庭成员收支排行浏览6项功能管理。对文件有修改的操作,会将操作结果保存至文件,对于需要查看结果的操作,将文件中的操作结作显示于屏幕上。 2、源文件定义 源文件: admin.c 家长功能选择界面及管理员功能调用。 guest.c 普通家庭成员功能选择界面及普通家庭成功能调用 creat.c 创建家庭成员收支信息文件。 add.c 增加收支信息 delete.c删除收支信息 modnum.c修改收支信息 qname.c 按家庭成员姓名查询收支信息 qseatnum.c按家庭成员序号查询收支信息 ssum.c 按收支合计数额排序浏览 3、计算公式 合计=收入-支出(sum=in-out) 4、函数声明 (1)void Admin() 功能:给出家长的功能选择提示界面,根据家长的选项调用相应函数。 输入:家长输入要进行操作的数字选项 处理: ①接收家长输入的操作选项 ②系统根据家长输入的操作选项调用相应的功能函数 ③显示相应函数的操作过程和结果。 输出:家长选项对应的函数的执行结果 程序所在文件:admin.c (2)void guest() 功能:给出普通用户的功能选择提示界面,根据普通用户的选项调用相应函数。 输入:普通用户输入要进行操作的数字选项 处理: ①接收普通用户输入的操作选项 ②系统根据用户输入的操作选项调用相应的功能函数。 ③显示相应函的操作过和结果 输出:用户选项对应的函数的执行结果。 程序所在文件:guest.c (3)void CreatFile() 功能:创建家庭成员收入信息文件。根据用户输入的文件名创建家庭成员收信息文件,将用户输入的若干条家庭成员收入信息记录存入该文件并保存。输入家庭成员序号为0,结束输入。最后列表显示文件内容。 输入: ①家庭成员收信息文件的文件名。 ②若干条家庭成员收信息记录(序号、姓名、收支构成) ③输入序号为0,结束输入。 处理: ①接收用户输入的文件名、创建文件。 ②提示用户逐条输入家庭成员收入信息记录 ③获取用户输入记录信息,通过收、支出用公式计算合计项。 ④将完整的家庭成员收入记录存入文件 ⑤循环判断用户输入的家庭成员序号,如为0则结束输入。 ⑥读取文件,列表显示文件内容。 输出:列表显示用户创建并输入内容后的文件内容。 程序所在文件:creat.c (4)void AddRecord() 功能:增加。根据用户输入的文件名打开家庭成员财务信息文件,进行添加记录操作,如没有文件存在,则他建。将用户输入的若干条家庭成员财务信息记录追加存入该文件并保存。输入家庭成员序号为0,结束输入。最后列表显示文件内容。 输入: ①要追加的家庭成员财务信息记录(序号、姓名、收入构成)。 ②输入序号为0,结束输入。 处理: ①打开文件,当文件不存在时,创建文件 ②提示用户逐条输入家庭成员财务信息记录。 ③获取用户输入的记录信息,通过收、支出用公式计算合计项。 ④将完整的家庭成员财务记录追加存入文件。 ⑤循环判断用户输入的家庭成员序员,为0则结束输入。 ⑥读取文件,列表显示文件内容。 输出:列表显示用户追加财务信息记录后的文件内容。 程序所在文件:add.c (5)void DelRecord() 功能:删除家庭成员收支信息。根据家长输入的文件名打开家庭成员财务信息文件,进行删除记录操作,如没有文件存在,则提示打开文件失败。将要删除的家庭成员号对应的家庭成员记录从文件中删除,并保存文件,可继续删除。最后列表显示文件内容。 输入: ①要删除家庭成员财务信息记录的文件名。 ②要删除家庭成员的家庭成员号码。 ③是否继续删除的选项字母。 处理: ①接收家长输入的文件名、用追加方式打开文件,当文件不存在时,提示错误。 ②提示家长输入要删除的家庭成员的家庭成序号。 ③将文件中对应的家庭成员记录删除。 ④将进行删除操作后的文件进行保存。 ⑤读取文件,列表显示文件内容。 输出:列表显示家长删除收支信息记录后的文件内容。 程序所在文件:delete.c (6)void ModifyByNumber() 功能:修改家庭成员收支信息。输入要修改的家庭成员的编号,输入要修改的各项内容,并保存文件。可继续修改。最后列表显示文件内容。 输入: ①要修改家庭成员的编号。 ②要修改的各项家庭成员记录的内容值(姓名、收支构成)。 ③是否继续修改的选项字母。 处理: ①用读的方式打开文件,当文件不存在是,提示错误。 ②提示家长输入要修改家庭成员的家庭成员序号。 ③提示家长输入要修改的各项内容值。 ④将文件中对应的家庭成员记录进行修改。 ⑤根据家长输入的收入、支出计算并修改合计项。 ⑥将进行修改操作后的数组写入文件并进行保存。 ⑦读取文件,列表显示修改后的文件内容。 输出:列表显示家长修改财务信息记录后的文件内容。 程序所在文件:modnum.c (7)void QueryByName() 功能:按姓名查询。根据用户输入的文件名打开家庭成员财务信息文件,进行按姓名查询操作,如没有文件存在,则提示打开文件失败。列表显示查找到的记录内容,并提示是否进行下次查询。 输入: ①要查询家庭成员的家庭成员姓名。 ②是否继续删除的选项字母。 处理: ①用读方式打开文件,当文件不存在时,提示错误。 ②提示用户输入要查询家庭成员的家庭成员序号。 ③循环匹配查找对应记录。 ④如查找到,列表显示查找结果。 ⑤提示用户是否进行下次查找。 输出:列表显示用户查找到的财务信息记录。 程序所在文件:qname.c (8)void QueryBySeatNum() 功能:按序号查询。根据用户输入的文件名打开家庭成员财务信息文件,进行按序号查询操作,如没有文件顾在,则提示打文件失败。列表显示查找到的记录内容,并提示是否进行下次查询。 输入: ①要查询家庭成员的编号。 ②是否继续查找选项。 处理: ①用读方式打开文件,当文件不存在时,提示错误 ②提示用户输入要查询家庭成员的家庭成序号 ③循环匹查找对应记录 ④如查找到列表显示查找结果 ⑤提示用户是否进行下次查找。 输出:列表显示用户查找到的财务信息记录。 程序所在文件:qseatnum.c (9)void SortBySum() 功能:按合计排序浏览。根据用户输入的文件名打开家庭成员财务信息文件,进行按合计排序浏览操作,如没有文件存在,则提示打文件失败。列表显示排序后的文件内容。 输入:要排序家庭成员财务信息记录的文件名。 处理: ①用读方式打开文件,当文件不存在时提示错误 ②用选择法进行排序。 ③将排序结果写入文件,并列表显示。 输出:列表显示按合计排序后的财务信息记录。 程序所在文件:ssum.c 家庭成员管理模块 家庭成员管理模块与电子投票系统的用户管理模块相同。在此略。 下载完整程序
下载完整程序 需求分析 家庭财务系统主要对家庭的各项财务收支管理进行在计算机上的信息存储和处理,从而简化用户的工作量。在需求分过程中,概括描述了本软件能够为用户提供哪些服务、系统功能的整体框架,以及相应的业务流程。 系统概述 家庭财务管理系统应用软件给家庭成员提供了一个在Windows操作系统上运行的管理平台,家庭成可以对其成员编号、姓名以及收入、支出构成进行增加、删除、修改等管理操作。同时该系统还提供了家庭成员管理功能,根据家庭成员的分类,其拥有的权限也不同,系统可以判断登录家庭成员管理功能,根据家庭成员的分类,其拥有的权限也不同,系统可以判断登录家庭成员的用户名和密码,从而判断其是否可以使用该系统。系统亦可获取登录家庭成员的权限信息,从而判断该家庭成员能够使用该系统的哪些特定功能,不同级别的家庭成员之间不能够越权使用系统功能。家庭成员分为家长和普通成员两类。 功能需求描述 家庭财务管理系统软件是为用户进行家庭成员的收支构成及信息管理进行辅助的应用软件、功能需求描述如下。 ①用户登录:系统获取的家庭成员用户名和密码判断该家庭成员能否成功登录系统,并且当用户登录后根据权限判断该家庭成员是家长还是普能成员,可以使用哪些对庆的功能。普通级别的用户只有浏览等权限而不能进行实质性的改动。 ②给家庭成员提供功能选择界面:不同级别的家庭成员对应不同的功能选择界面.功能选择界面包括输入功能选项、调用相应程序两大需求。管理员和普通用户对应的功能选择界面是不同的。 ③创建收支信息文件:用户根据提示输入家庭成员的序号、姓名、各项财务信息,如收入、支出、合计。可一次性输入多条家庭成员的收支信息记录。系统将家庭成员收信息记录存储在系统磁盘的文件中,以便进行管理、查找和备份。 ④增加家庭成员收支信息:可在原有收支信息文件的基础上增加新的家庭成员财务信息记录,并继续保存至磁盘,并且将增加后的文件存储状况显示给用户。在增加新家庭成员收支记录的过程中,系统提示用户输入收、支出两个财务构成项,最终合计,要求系统处动计算获得,并同样作为财务构成项存入文件中对应的记录中。 ⑤删除家庭成员收支信息:提示用户输入要进行删除操作的家庭成员序号,如果在文件中有该家庭成员的收支信息存在,则将该序号所对应的姓名、序号、各种收入构成等在对应文件中加以删除。由系统提示是否继续进行删除操作,让家长可多次进行删除操作。 ⑥修改家庭成员收支信息:提示用户输入要进行修改操作的家庭成员序号,如果在文件中有该家庭成员的收支信息存在,则提示用户输入该序号对应的家庭成姓名、收入和支出构成等需要修改的选项,并将修改结果存储于文件。该部分需求也需要提示用户选择是否继续进行修改操作。修改操作中的合计部分,也需要有系统根据修改后的收、支出项目自动计算修改后的合计财务数额,并连同用户输入的其他修改项一起存入磁盘文件中。 ⑦查询家庭成员财务情况:分为根据姓名查询和根据序号查询两个具体需求,分别提示用户输入要查询家庭成信息的序号或姓名,如果在磁盘文件中有对应的家庭成员财务信息,则提示用户已找到,并逐项列出对应家庭成员的收支状况。在该功能中,也需提示用户是否需要继续查找,如不再继续查找,则返回主界面。 ⑧家庭成员收支排行浏览:该项需求要求根据家庭成员的合计项进行排行,以便用户对家庭成员收状况有较为直观的了解。 ⑨家庭成员管理:家长对普通家庭成员的管理也需要进行家庭成员的创建、增加、删除、修改和浏览。家长创建的家庭成员记录存储在名为yonghu的磁盘文件中,每当有家庭成员登录系统时,系统都会根据该文件中的用户名和密码进行核实判断,用户才能够顺得登录。家长还具有增加新家庭成员的功能。新增家庭成员的登录名及密码、权限等也被继续存储在yonghu文件中。当某些家庭成员不再使用系统时,还可进行删除操作,并且家长具有修改家庭成员权限的功能。 总体设计 对本系统的功能模块、运行环境等进行了合理分析之后。下面要从系统总体结构、模块功能、界面和数据结构几方面进行系统的总体设计。总体设计可在软件开发的早期站在全局高度对软件结构进行优化,这个时期付出的代价不高,却可以使软件质量得到重大改进。 开发与设计的总体思想 本系统的总体思想基于结构化的程序设计。应用高级语言程序设计中的基本控制结构,如循环和选择,着重实现管理系统的增、删、改、查等典型的管理功能由于主要实现的是管理系统的增、删、改、查等典型功能。在软件开发过程中应用了软件工程的基本理论。因此,系统的设计方法是结构化设计方法,开发手段是C语言,在WinTC环境下开发。 系统模块结构图 依据需求分析结果,家庭财务管理系统可以分为4个模块:用户登录模块、家庭成员财务管理模块、用户管理模块、功能选择模块。如图所示。 模块设计 1、家庭成员登录模块 提示用户输入登录名和密码,调用文件中存储的用户信息进行校验,只有当用户名和密码相匹配时,才允许用户使用该系统。用户登录系统后能够允许使用的系统功能和用户的权限有关。普通家庭成员只能进行查询和浏览,家长还可以进行增、删、改操作和对普通家庭成员的管理。权限的设置在家庭成员信息文件中进行限制,权限的判定在家庭成员登录模块进行。模块功能树如图所示 2、家庭成员财务管理模块 当用户成功登入系统时,即可根据权限不同,调用家庭成员财务管理模块中的部分或全部子功能。家庭成员财务管理模块的主要功能包括如下几个部分。 ①创建收支信息文件:提示家庭成员输入保存家庭成员收支信息记录的文件名,在磁盘上创建该文件,继续提示用户逐条输入家庭成员收支信息记录,每条记录包括家成员编号、姓名和收入、支出。其中家庭成员财务合计项由系统自动计算获得,计算公式为:合计=收入+支出。该功能可连续输入若干条家庭成员记录,输入家庭成员号为0时则停止输入。 ②增加收支信息:同上。 ③删除收支信息:提示家长输入要进行删除的文件名及家庭成员号码,如在文件中找到要删除的家庭成员记录,则将该家庭成员的对应信息从文件中删除,否则提示用户文件中没有相匹配的家庭成员,让用户选择是否继续进行操作。 ④修改收支信息:提示家长输入要进行修改的文件名及家庭成员号,如果存在有对应记录,则获取家长输入的要修改的家庭成员姓名、收支构成等主要内容。合计部分同样由系统自动计算获得,并自动赋值给相应家庭成员的合计项。 ⑤查询收支信息:可根据成员姓名和编号两种方式进行查询,若有查询结果,则向用户显示相应查询结果的家庭成员号、姓名、收入构成等各项内容,并可让用户选择是否继续查找。 ⑥家庭成员收支排行浏览:提示用户输入要浏览的文件名,根据家庭成员财务合计项进行降序排行,将排行结果列表显示给用户。 模块功能树如图所示 3、家庭成员管理模块 家庭成员管理模块实现对家庭财务管理系统的使用者的用户名、密码、权限的管理,以便家庭成员登录模块进行校验和权限判断。只有家长能够使用家庭成员管理模块的各项功能。该模块有如下5个子功能。 ①创建家庭成员信息文件:创建文件存储家庭成员各项信息,将家庭成员的各项信息存入磁盘上名为yonghu的文件中,以便用户登录模块校验判断。 ②增加新家庭成员:家长登录后可选增加新家庭成员功能,将新登录名、密码、权限等各项信息追加至yonghu文件。 ③删除家庭成员:家长登录后可选择输入要删除的家庭成员编号,将该家庭成员的相关信息从yonghu文件中删除,今后该用户则无法在继续登录系统。 ④修改家庭成员:家长登录后选择修改家庭成员功能,则输入要修改的家庭成员编号,继续按照系统提示输入要修改的成员姓名、密码、及权限,使得该家庭成员再次登入系统时要符合家长修改后的信息方可登录。 ⑤浏览家庭成员信息:将yonghu文件中存储的家庭成员信息按成员编号排序显示给家长,以便家长对各个用户进行管理操作。 家庭成员管理模块功能树如图所示。 4、功能选择 提供给不同权限的家庭成员相应的功能选择界面,在该模块中获取用户输入的功能选项,并调用相应的功能模块。功能选择模块的功能树如图所示。 系统流程描述 系统流程图如图所示。 界面设计 家庭财务管理系统的界面设计主要遵循方便易用、界面友好的原则,具体设计如下。 1、家庭成员登录界面设计 ①家庭成员登录界面是用户与系统第一步进行交互的接口,在家庭成员输入登录名和密码时都给以清晰的提示,当用户误操作或忘记密码时提示用户重新输入。 ②同时考虑到用户登录的安全性,因此用户在使用系统时输入的密码采用不回显的方式从屏幕获取用户输入的字符,因此,用户输入密码时不会被别人从旁窃取。 ③当用户输入的用户名与密码相符,则会提示用户登录成功,并通过程序处理告知用户所拥有权限是管理员(Administrator)还是普通用户(user)。 ④根据不同的用户权限,调用相应的管理功能选择界面。 功能选择界面的设计 ①家长的功能主要包括家庭成员财务信息管理和家庭成员管理两大部分,并且这两部分的操作大致类似,使得界面友好易用。 ②普通家庭成员使用该系统主要进行收入查询,浏览操作,功能较为简单,界面也应简洁易读。 具体设计如下图所示。 3、执行结果界面设计 由于C语言对图形化界面的支持比较有限,因此,对于该管理系统,首要考虑的是执结果的清晰易读。对于此类的界面设计要采用C语言自带的打印函数进行简单处理,将执行结果用列表的方式清晰显示结用户。 数据结构的设计 1、常量定义 #define SIZE 100 在排序浏览、删除、修改等功能模块中该常量用于定义数组长度。程序先把要排序或删除、修改的文件中的每条记录存放在数组当中,然后用特定的算法对该数组中的家庭成员信息进行排序、删除、修改等操作。C语言中的数组长度是固定的,并且必须在声明时指定数组的长度,因此用SIZE常量定义该数组的长度,由于财务信息文件的信息量较大,因此定义大小为100,并可根据需要进行简单更改。 2、家庭成员收入信息数据结构 用于存放每个家庭成员的序号、姓名、收入、支出、合计方面信息。 typedef struct { long Number;/*Field of number*/ char Name[20];/*Field of name*/ float in;/*Field of in*/ float out;/*Field of out*/ float sum;/*Field of sum*/ }money; 由于序号、姓名、收入构成用于描述一个有机整体——家庭成员,为了表明这些字段不是孤立的,而是共同描述一个完整的事物,因此用结构体这种形式来体现。 3、登录用户信息数据结构 用户描述登录系统的用户序号、用户名、密码和权限信息。 typedef struct { long Number; /* 家庭成员的序号 */ char Name[20];/* 家庭成员的名称 */ char ps[8]; /* 家庭成员密码 */ int power; /* 家庭成员权限 */ }user; 详细设计 基于系统需求分析与系统总体设计的结论,本系统采用C语言实各模块的功能,下面按照模块的划分来分别阐述系统的详细设计和实现过程。 家庭成员登录模块 1、模块描述 提供用户登录验证功能,当运行家庭财务管理系统时,系统提示用户输入登录名,并用不回显的方式输入密码,由系统提取磁盘上名为yonghu的文件验证用户名密码是否正确,并提供重新输入用户名和密码的选择功能。当用户成功登录时,系统通过判断用户权限(user结构体中的power变量),显示给用户相应的功能选择界面。当用户名和密码不匹配时,提示家庭成员重新登录或退出。 2、源文件定义 源文件:login.c 头文件:user.h 3、函数声明 main()函数 功能:进入家庭成员登录界面,验证用户名和密码,判断用户权根,使家庭成员进入相应的功能选择界面。 输入:用户名、密码。 处理: ①接收家庭成员输入的用户名和密码,存放在相应变量中进行判断。 ②判断用户名和密码是否相符,如果相符,则获得该家庭成员权限。 ③判断该用户权限是家长还是普通家庭成员,并调用相应功能选择界面。 ④如果用户名和密码不符,提示用户选择重新输入或退出系统。 输出: ①家庭成员登录成功或失败的信息 ②成功登录家庭成员权限 ③对应当前登录的家庭成员权限的功能选择界面 程序清单:(1)login.c /* login.h用户登陆,判断登录名、密码、权限,根据权限调用相应功能选择界面 包含用户信息头文件 包含管理员、普通用户的功能选择界面*/ #include "stdio.h" #include "admin.c" #include "guest.c" void main() { FILE * fp=NULL; user Show; user TempS; char DataFile[10]="yonghu";/* 存放用户文件 */ int i; char relogin; /* 是否重新登录 */ int success=0; /* 登录成功的标志 */ printf("#===================================================#\n"); printf("# Welcome to the Family Management System #\n"); printf("#===================================================#\n"); again: /* 输入用户名 */ printf("Please enter the user name:"); scanf("%s",TempS.Name); TempS.Name[19]=‘\0‘; /* 输入密码 */ printf("Please enter the password:"); fflush(stdin); for(i=0;i<7;i++) { TempS.ps[i]=getch(); TempS.ps[i+1]=‘\0‘;/* 字符要以‘\0‘结尾 */ if(TempS.ps[i]==‘\b‘) { i--; TempS.ps[i]=‘\0‘;/* 清除前一个字会 */ i--;/* 接收前一个字符 */ printf("\b "); printf("\b"); continue; } if(TempS.ps[i]==‘\r‘) { TempS.ps[i]=‘\0‘; break; } printf("*"); } fp=fopen(DataFile,"rb"); if(fp==NULL) /* 打开文件失败时提示 */ { printf("\nOpen file %s fail!End with any key\n",DataFile); perror("Open file fail"); getch(); return; }
while(fread(&Show,sizeof(user),1,fp)!=(int)NULL) { if(strcmp(TempS.Name,Show.Name)==0&&strcmp(TempS.ps,Show.ps)==0) { printf("\nlogin successful!\n"); success=1; break; } } fclose(fp); if(success==1) /* 登录成功 */ { if(Show.power==1) { Admin(Show);/*家长(管理员)功能的界面*/ } else { Guest(Show); } }/* 未登录成功 */ else { fflush(stdin);/* 清楚输入缓冲区中的字符 */ printf("\nError user name or password!input again(y/n):"); relogin=getchar(); if(relogin==‘y‘||relogin==‘Y‘) { goto again; } else { printf("End program!"); getch(); exit(0); } } } (以后将只给出函数说明) 家庭成员财务管理模块 1、模块描述 对若干家庭成员收入记录进行创建家庭成员财务收支信息文件、增加财务收支信息、删除财务收支信息、修改收支信息、查询收支信息和家庭成员收支排行浏览6项功能管理。对文件有修改的操作,会将操作结果保存至文件,对于需要查看结果的操作,将文件中的操作结作显示于屏幕上。 2、源文件定义 源文件: admin.c 家长功能选择界面及管理员功能调用。 guest.c 普通家庭成员功能选择界面及普通家庭成功能调用 creat.c 创建家庭成员收支信息文件。 add.c 增加收支信息 delete.c删除收支信息 modnum.c修改收支信息 qname.c 按家庭成员姓名查询收支信息 qseatnum.c按家庭成员序号查询收支信息 ssum.c 按收支合计数额排序浏览 3、计算公式 合计=收入-支出(sum=in-out) 4、函数声明 (1)void Admin() 功能:给出家长的功能选择提示界面,根据家长的选项调用相应函数。 输入:家长输入要进行操作的数字选项 处理: ①接收家长输入的操作选项 ②系统根据家长输入的操作选项调用相应的功能函数 ③显示相应函数的操作过程和结果。 输出:家长选项对应的函数的执行结果 程序所在文件:admin.c (2)void guest() 功能:给出普通用户的功能选择提示界面,根据普通用户的选项调用相应函数。 输入:普通用户输入要进行操作的数字选项 处理: ①接收普通用户输入的操作选项 ②系统根据用户输入的操作选项调用相应的功能函数。 ③显示相应函的操作过和结果 输出:用户选项对应的函数的执行结果。 程序所在文件:guest.c (3)void CreatFile() 功能:创建家庭成员收入信息文件。根据用户输入的文件名创建家庭成员收信息文件,将用户输入的若干条家庭成员收入信息记录存入该文件并保存。输入家庭成员序号为0,结束输入。最后列表显示文件内容。 输入: ①家庭成员收信息文件的文件名。 ②若干条家庭成员收信息记录(序号、姓名、收支构成) ③输入序号为0,结束输入。 处理: ①接收用户输入的文件名、创建文件。 ②提示用户逐条输入家庭成员收入信息记录 ③获取用户输入记录信息,通过收、支出用公式计算合计项。 ④将完整的家庭成员收入记录存入文件 ⑤循环判断用户输入的家庭成员序号,如为0则结束输入。 ⑥读取文件,列表显示文件内容。 输出:列表显示用户创建并输入内容后的文件内容。 程序所在文件:creat.c (4)void AddRecord() 功能:增加。根据用户输入的文件名打开家庭成员财务信息文件,进行添加记录操作,如没有文件存在,则他建。将用户输入的若干条家庭成员财务信息记录追加存入该文件并保存。输入家庭成员序号为0,结束输入。最后列表显示文件内容。 输入: ①要追加的家庭成员财务信息记录(序号、姓名、收入构成)。 ②输入序号为0,结束输入。 处理: ①打开文件,当文件不存在时,创建文件 ②提示用户逐条输入家庭成员财务信息记录。 ③获取用户输入的记录信息,通过收、支出用公式计算合计项。 ④将完整的家庭成员财务记录追加存入文件。 ⑤循环判断用户输入的家庭成员序员,为0则结束输入。 ⑥读取文件,列表显示文件内容。 输出:列表显示用户追加财务信息记录后的文件内容。 程序所在文件:add.c (5)void DelRecord() 功能:删除家庭成员收支信息。根据家长输入的文件名打开家庭成员财务信息文件,进行删除记录操作,如没有文件存在,则提示打开文件失败。将要删除的家庭成员号对应的家庭成员记录从文件中删除,并保存文件,可继续删除。最后列表显示文件内容。 输入: ①要删除家庭成员财务信息记录的文件名。 ②要删除家庭成员的家庭成员号码。 ③是否继续删除的选项字母。 处理: ①接收家长输入的文件名、用追加方式打开文件,当文件不存在时,提示错误。 ②提示家长输入要删除的家庭成员的家庭成序号。 ③将文件中对应的家庭成员记录删除。 ④将进行删除操作后的文件进行保存。 ⑤读取文件,列表显示文件内容。 输出:列表显示家长删除收支信息记录后的文件内容。 程序所在文件:delete.c (6)void ModifyByNumber() 功能:修改家庭成员收支信息。输入要修改的家庭成员的编号,输入要修改的各项内容,并保存文件。可继续修改。最后列表显示文件内容。 输入: ①要修改家庭成员的编号。 ②要修改的各项家庭成员记录的内容值(姓名、收支构成)。 ③是否继续修改的选项字母。 处理: ①用读的方式打开文件,当文件不存在是,提示错误。 ②提示家长输入要修改家庭成员的家庭成员序号。 ③提示家长输入要修改的各项内容值。 ④将文件中对应的家庭成员记录进行修改。 ⑤根据家长输入的收入、支出计算并修改合计项。 ⑥将进行修改操作后的数组写入文件并进行保存。 ⑦读取文件,列表显示修改后的文件内容。 输出:列表显示家长修改财务信息记录后的文件内容。 程序所在文件:modnum.c (7)void QueryByName() 功能:按姓名查询。根据用户输入的文件名打开家庭成员财务信息文件,进行按姓名查询操作,如没有文件存在,则提示打开文件失败。列表显示查找到的记录内容,并提示是否进行下次查询。 输入: ①要查询家庭成员的家庭成员姓名。 ②是否继续删除的选项字母。 处理: ①用读方式打开文件,当文件不存在时,提示错误。 ②提示用户输入要查询家庭成员的家庭成员序号。 ③循环匹配查找对应记录。 ④如查找到,列表显示查找结果。 ⑤提示用户是否进行下次查找。 输出:列表显示用户查找到的财务信息记录。 程序所在文件:qname.c (8)void QueryBySeatNum() 功能:按序号查询。根据用户输入的文件名打开家庭成员财务信息文件,进行按序号查询操作,如没有文件顾在,则提示打文件失败。列表显示查找到的记录内容,并提示是否进行下次查询。 输入: ①要查询家庭成员的编号。 ②是否继续查找选项。 处理: ①用读方式打开文件,当文件不存在时,提示错误 ②提示用户输入要查询家庭成员的家庭成序号 ③循环匹查找对应记录 ④如查找到列表显示查找结果 ⑤提示用户是否进行下次查找。 输出:列表显示用户查找到的财务信息记录。 程序所在文件:qseatnum.c (9)void SortBySum() 功能:按合计排序浏览。根据用户输入的文件名打开家庭成员财务信息文件,进行按合计排序浏览操作,如没有文件存在,则提示打文件失败。列表显示排序后的文件内容。 输入:要排序家庭成员财务信息记录的文件名。 处理: ①用读方式打开文件,当文件不存在时提示错误 ②用选择法进行排序。 ③将排序结果写入文件,并列表显示。 输出:列表显示按合计排序后的财务信息记录。 程序所在文件:ssum.c 家庭成员管理模块 家庭成员管理模块与电子投票系统的用户管理模块相同。在此略。
下载完整程序