一、设计目的
(1)巩固和加深对C语言课程基本知识的理解和掌握;
(2)掌握C语言编程和调试的基本技能;
(3)掌握利用C语言进行软件设计的方法
二、任务概述
(1)本课程设计用C语言创建的系统实现对家庭成员收入、支出进行添加、查询、删除、修改功能。
(2)本系统以菜单方式工作,通过家庭成员姓名登录系统。
(3)支持录入,删除,修改成员收支记录的功能。
三、功能展示




四、思维导图

五、程序源码
#include<stdio.h> #include<conio.h> #include<string.h> #include<windows.h> #include<stdlib.h> int Recordcount;//定义全局变量 struct F_Data {
int year; //年 int month; //月 int data; //日期 float amout; //金额 char name[20]; //姓名 int type; //收入或支出类型 char comment[100]; //备注 struct F_Data*next; //定义一个指针 }e[1000]; struct F_Data*head=NULL; void add(); void search(); void delete_rec(); void show(); void menu(); void start(); void start()//开始界面 {
system("cls"); printf("\n\n\n\n\n"); printf("\t*\n"); printf("\t*欢迎使用家庭财务管家系统\n"); printf("\t\n"); printf(" \n\n\n\n\n\n\n "); system("pause"); } void menu()//菜单界面 {
system("cls"); printf("\n\n\n\n\n"); printf(" * 菜单"); printf(" \n\n"); printf(" 1,输入\n"); printf(" 2,显示\n"); printf(" 3,查询\n"); printf(" 4,删除\n"); } void add()//添加模块代码 {
system("cls"); /*清屏*/ struct F_Data *p=NULL; /*定义pNode为struct F_Data类型指针*/ p=(struct F_Data*)malloc(sizeof(struct F_Data)); /*运行时动态调整所占内存 的大小*/ printf("请输入年份:"); scanf("%d",&p->year); printf("请输入月份:"); scanf("%d",&p->month); if((p->month>0)&&(p->month<13)) /*限定月份为1~12 */ {
printf("请输入日期:"); scanf("%d",&p->data); printf("请输入金额:"); scanf("%f",&p->amout); printf("请输入姓名:"); scanf("%s",p->name); printf("收入按1,支出按0:"); scanf("%d",&p->type); printf("请输入类型:"); scanf("%s",p->comment); p->next=head; /*插入一个结点 */ head=p; Recordcount++; /*结点数加一 */ } void save(int m); system("PAUSE"); /*停顿*/ }// 在菜单界面选择"添加"选项,界面会依次显示年份,月份,且限定月份为1~12,再显示日期,金额,姓名,type,类型逐个填写,然后返回到菜单界面。 void save(int m) //保存函数 {
FILE *fp; int i; //文件行指针 if((fp=fopen("d:家庭财务管理.dat","wb"))==NULL) //打开文件、为输出打开一个二进制文件 {
printf("文件打开错误!\n"); exit(0); } for(i=0;i<m;i++) if(fwrite(&e[i],sizeof(struct F_Data),1,fp)!=1) {
printf("没有文件!"); getchar(); return; } fclose(fp); } void search()//查询模块代码 {
system("cls"); /*清屏*/ char name[20]; int type; int choice; struct F_Data*p=NULL; /*定义pNode为struct F_Data类型指针*/ printf("1按姓名查找\n2按类型查找\n "); printf("请输入你的选择:"); scanf("%d",&choice); if(choice==1) {
printf("请输入姓名:"); scanf("%s",name); for(p=head;p!=NULL;p=p->next) /*从链表的第一个结点到尾结点 */ if(strcmp(p->name,name)==0) /*如果输入的name和结点中的name一样 */ {
printf("%d\t",p->year); printf("%d\t",p->month); printf("%d\t",p->data); printf("%.2f\t",p->amout); printf("%s\t",p->name); printf("%d\t",p->type); printf("%s\n",p->comment); } } if(choice==2) {
printf("请输入类型:1收入 0支出\n "); scanf("%d",&type); for(p=head;p!=NULL;p=p->next) if(p->type==type) /*如果输入的type和结点中的type一样 */ {
printf("%d\t",p->year); printf("%d\t",p->month); printf("%d\t",p->data); printf("%.2f\t",p->amout); printf("%s\t",p->name); printf("%d\t",p->type); printf("%s\n",p->comment); } } system("PAUSE"); /*停顿*/ }// 在菜单界面选择"查询"选项,界面会让你选择查找的方式 :1按姓名查找2按类型查找,用户可以根据自己的需要进行选择,按1就输入联系人的姓名,按2就输入类型,系统会进行查询,如果有就显示该条记录。 void delete_rec() {
system("cls"); /*清屏*/ char name[20]; float amout; int choice; struct F_Data *p=NULL,*q=NULL; /*定义p和q都为struct F_Data类型指针*/ p=head; /*p指向第一个结点 */ q=head; /*q指向第一个结点 */ printf("请输入要删除者的姓名:"); scanf("%s",name); printf("请输入金额:"); scanf("%f",&amout); for(;q!=NULL;q=q->next) /*q指针从链表的第一个结点到尾结点 */ {
if((head->amout==amout)&&(strcmp(head->name,name)==0)) /*如果头结点符合要求 */ {
printf("%d\t",q->year); printf("%d\t",q->month); printf("%d\t",q->data); printf("%.2f\t",q->amout); printf("%s\t",q->name); printf("%d\t",q->type); printf("%s\n",q->comment); printf("确认删除?\n 1是\n 2否\n"); scanf("%d",&choice); if(choice==1) {
head=q->next; /*删除头结点 */ Recordcount--; /*结点数减一*/ } else break; } else {
if((q->amout==amout)&&(strcmp(q->name,name)==0)) /*如果结点符合要求 */ {
{
printf("%d\t",q->year); printf("%d\t",q->month); printf("%d\t",q->data); printf("%.2f\t",q->amout); printf("%s\t",q->name); printf("%d\t",q->type); printf("%s\n",q->comment); } printf("确认删除?\n 1是\n 2否\n"); scanf("%d",&choice); if(choice==1) {
p->next=q->next; /*删除一个结点*/ Recordcount--; /*结点数减一*/ } else break; } else {
p=q; /*p后移一 个位子*/ } } } system("PAUSE"); /*停顿*/ }//选择删除选项后,界面会让使用者输入要删除者的姓名及金额,并根据输入的信息显示该条记录,并且为了防止意外删除而有提示是否删除,经使用者再三确认后便删除该记录。 void show()//显示模块 {
system("cls"); /*清屏*/ struct F_Data*p=NULL; /*定义p和q都为struct F_Data类型指针*/ float j=0.0,i=0.0,w=0.0; for(p=head;p!=NULL;p=p->next) /*从链表的第一个结点到尾结点 */ {
printf("%d\t",p->year); printf("%d\t",p->month); printf("%d\t",p->data); printf("%.2f\t",p->amout); printf("%s\t",p->name); printf("%d\t",p->type); printf("%s\n",p->comment); if(p->type==1) j+=p->amout; /*把type=1记录中的金额全部加给j*/ else i+=p->amout; } printf("一共收入:%.2f\n",j); printf("一共支出:%.2f\n",i); w=j-i; printf("当前余额:%.2f\n",w); system("PAUSE"); /*停顿*/ } //在界面选择显示选项后,屏幕上会把每条记录依次显示出来,并把总收入和总支出及目前余额也统计并显示出来。 int main() {
int n,button; system("color 5A"); start(); menu(); // getchar(); do {
printf(" 请选择您想要的功能(1--4):\n"); scanf("%d",&n); if(n>0&&n<5) {
button=1;break; } else {
button=0; printf("输入有误,重新输入"); } }while(button==0); while(button==1) {
switch(n) {
case 1: add();break; case 2: show();break; case 3: search();break; case 4: delete_rec();break; default :break; } getchar(); printf("\n"); printf("按任意键继续\n"); getch(); system("cls"); /*清屏*/ menu(); /*调用菜单函数*/ printf("功能选择(1--4):\n"); scanf("%d",&n); printf("\n"); } }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/44836.html