#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#define STR 50
#define MAX 100
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47423314/article/details/112384709
————————————————
版权声明:本文为CSDN博主「程序员本员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_47423314/article/details/112384709
struct User {//用户信息结构体char username[STR];char password[STR];
};
struct UseLinkNode {//用户信息链表结构体struct User data;struct UseLinkNode* next;
};
struct Record {//收支信息结构体char id[STR];char member[STR];float money;char type[STR];char date[STR];char remark[STR];
};
struct RecLinkNode {//收支信息链表结构体struct Record data;struct RecLinkNode* next;
};
struct Assets {//资产信息结构体int id;char member[STR];float money;
};
struct AssLinkNode {//资产信息链表结构体struct Assets data;struct AssLinkNode* next;
};
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47423314/article/details/112384709
————————————————
版权声明:本文为CSDN博主「程序员本员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_47423314/article/details/112384709
void saveUserInfo(struct UseLinkNode* useHead) {//保存用户信息FILE* fp;struct UseLinkNode* pUse;fp = fopen("User.txt", "w");if (fp == NULL) {return;}if (useHead->next == NULL) {fprintf(fp, "");}else {pUse = useHead;while (pUse->next != NULL) {pUse = pUse->next;fprintf(fp, "%s %s\n", pUse->data.username, pUse->data.password);}}fclose(fp);
}
void readUserInfo(struct UseLinkNode* useHead) {//读取用户信息FILE* fp;struct User temp;struct UseLinkNode* pUse, * qUse;fp = fopen("User.txt", "r");if (fp == NULL) {return;}pUse = useHead;while (fscanf(fp, "%s %s\n", temp.username, temp.password) != EOF) {qUse = (struct UseLinkNode*)malloc(sizeof(struct UseLinkNode));qUse->data = temp;qUse->next = NULL;pUse->next = qUse;pUse = pUse->next;}fclose(fp);
}
void saveRecordInfo(struct RecLinkNode* recHead) {//保存收支信息FILE* fp;struct RecLinkNode* pRec;fp = fopen("Record.txt", "w");if (fp == NULL) {return;}if (recHead->next == NULL) {fprintf(fp, "");}else {pRec = recHead;while (pRec->next != NULL) {pRec = pRec->next;fprintf(fp, "%s %s %f %s %s %s\n", pRec->data.id, pRec->data.member, pRec->data.money, pRec->data.type, pRec->data.date, pRec->data.remark);}}fclose(fp);
}
void readRecordInfo(struct RecLinkNode* recHead) {//读取收支信息FILE* fp;struct Record temp;struct RecLinkNode* pRec, * qRec;fp = fopen("Record.txt", "r");if (fp == NULL) {return;}pRec = recHead;while (fscanf(fp, "%s %s %f %s %s %s\n", temp.id, temp.member, &temp.money, temp.type, temp.date, temp.remark) != EOF) {qRec = (struct RecLinkNode*)malloc(sizeof(struct RecLinkNode));qRec->data = temp;qRec->next = NULL;pRec->next = qRec;pRec = pRec->next;}fclose(fp);
}
void saveAssetsInfo(struct AssLinkNode* assHead) {//保存资产信息FILE* fp;struct AssLinkNode* pAss;fp = fopen("Assets.txt", "w");if (fp == NULL) {return;}if (assHead->next == NULL) {fprintf(fp, "");}else {pAss = assHead;while (pAss->next != NULL) {pAss = pAss->next;fprintf(fp, "%d %s %f\n", pAss->data.id, pAss->data.member, pAss->data.money);}}fclose(fp);
}
void readAssetsInfo(struct AssLinkNode* assHead) {//读取资产信息FILE* fp;struct Assets temp;struct AssLinkNode* pAss, * qAss;fp = fopen("Assets.txt", "r");if (fp == NULL) {return;}pAss = assHead;while (fscanf(fp, "%d %s %f\n", &temp.id, temp.member, &temp.money) != EOF) {qAss = (struct AssLinkNode*)malloc(sizeof(struct AssLinkNode));qAss->data = temp;qAss->next = NULL;pAss->next = qAss;pAss = pAss->next;}fclose(fp);
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47423314/article/details/112384709
————————————————
版权声明:本文为CSDN博主「程序员本员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_47423314/article/details/112384709
void addRecordInfo(struct RecLinkNode* recHead) {//添加收支信息struct RecLinkNode* pRec, * qRec;struct Record input;int isExisted = 0;printf("请输入编号:");scanf("%s", input.id);pRec = recHead;while (pRec->next != NULL) {pRec = pRec->next;if (strcmp(pRec->data.id, input.id) == 0) {isExisted = 1;break;}}if (isExisted == 0) {printf("请输入家庭成员:");scanf("%s", input.member);printf("请输入金额:");scanf("%f", &input.money);printf("请输入类型:");scanf("%s", input.type);printf("请输入日期(yyyy-MM-dd):");scanf("%s", input.date);while (strlen(input.date) != 10 || input.date[4] != '-' || input.date[7] != '-') {printf("请重新输入日期(yyyy-MM-dd):");scanf("%s", input.date);}printf("请输入备注:");scanf("%s", input.remark);qRec = (struct RecLinkNode*)malloc(sizeof(struct RecLinkNode));qRec->data = input;qRec->next = NULL;pRec->next = qRec;printf("添加收支信息成功!\n\n");}else {printf("添加收支信息失败,输入的编号已存在!\n\n");}
}
void modifyRecordInfo(struct RecLinkNode* recHead) {//修改收支信息struct RecLinkNode* pRec;struct Record input;int isExisted = 0;if (recHead->next == NULL) {printf("当前收支信息为空,无法继续修改!\n\n");return;}printf("请输入需要修改的编号:");scanf("%s", input.id);pRec = recHead;while (pRec->next != NULL) {pRec = pRec->next;if (strcmp(pRec->data.id, input.id) == 0) {isExisted = 1;break;}}if (isExisted == 1) {printf("请输入家庭成员:");scanf("%s", input.member);printf("请输入金额:");scanf("%f", &input.money);printf("请输入类型:");scanf("%s", input.type);printf("请输入日期(yyyy-MM-dd):");scanf("%s", input.date);while (strlen(input.date) != 10 || input.date[4] != '-' || input.date[7] != '-') {printf("请重新输入日期(yyyy-MM-dd):");scanf("%s", input.date);}printf("请输入备注:");scanf("%s", input.remark);pRec->data = input;printf("修改收支信息成功!\n\n");}else {printf("修改收支信息失败,输入的编号不存在!\n\n");}
}
void deleteRecordInfo(struct RecLinkNode* recHead) {//删除收支信息struct RecLinkNode* pRec, * qRec;struct Record input;int isExisted = 0;if (recHead->next == NULL) {printf("当前收支信息为空,无法继续删除!\n\n");return;}printf("请输入需要删除的编号:");scanf("%s", input.id);pRec = recHead;while (pRec->next != NULL) {if (strcmp(pRec->next->data.id, input.id) == 0) {isExisted = 1;break;}pRec = pRec->next;}if (isExisted == 1) {qRec = pRec->next;pRec->next = qRec->next;free(qRec);printf("删除收支信息成功!\n\n");}else {printf("删除收支信息失败,输入的编号不存在!\n\n");}
}
void queryRecordInfo(struct RecLinkNode* recHead, struct AssLinkNode* assHead) {//查询收支信息int qobj, flag = 0;struct RecLinkNode* pRec;struct AssLinkNode* pAss;struct Record input;if (recHead->next == NULL) {printf("当前收支信息为空,无法继续查询!\n\n");return;}printf("请输入需要查询的对象编号(0.全部 1.编号 2.家庭成员 3.月份 4.类型 5.资产信息):");scanf("%d", &qobj);if (qobj == 0 || qobj == 5) {}else if (qobj == 1) {printf("请输入查询的编号:");scanf("%s", input.id);}else if (qobj == 2) {printf("请输入查询的家庭成员:");scanf("%s", input.member);}else if (qobj == 3) {printf("请输入查询的月份(yyyy-MM):");scanf("%s", input.date);}else if (qobj == 4) {printf("请输入查询的类型:");scanf("%s", input.type);}else {printf("查询收支信息失败,输入的对象编号不存在!\n\n");return;}if (qobj != 5) {pRec = recHead;while (pRec->next != NULL) {pRec = pRec->next;if ((qobj == 0) || (qobj == 1 && strcmp(pRec->data.id, input.id) == 0) || (qobj == 2 && strcmp(pRec->data.member, input.member) == 0) || (qobj == 3 && strstr(pRec->data.date, input.date) != NULL) || (qobj == 4 && strcmp(pRec->data.type, input.type) == 0)) {if (flag == 0) {printf("+------------+------------+------------+------------+------------+------------+\n");printf("|%-12s|%-12s|%-12s|%-12s|%-12s|%-12s|\n", "编号", "家庭成员", "金额", "类型", "日期", "备注");printf("+------------+------------+------------+------------+------------+------------+\n");flag = 1;}printf("|%-12s|%-12s|%-12.2f|%-12s|%-12s|%-12s|\n", pRec->data.id, pRec->data.member, pRec->data.money, pRec->data.type, pRec->data.date, pRec->data.remark);printf("+------------+------------+------------+------------+------------+------------+\n");}}}else {printf("+------------+------------+------------+\n");printf("|%-12s|%-12s|%-12s|\n", "编号", "家庭成员", "总资产");printf("+------------+------------+------------+\n");pAss = assHead;while (pAss->next != NULL) {pAss = pAss->next;printf("|%-12d|%-12s|%-12.2f|\n", pAss->data.id, pAss->data.member, pAss->data.money);printf("+------------+------------+------------+\n");}}if (flag == 0) {printf("查询无结果!\n");}printf("\n");
}
void sortRecordInfo(struct RecLinkNode* recHead) {//排序收支信息int sobj, stype;struct RecLinkNode* pRec, * qRec, * pTemp = NULL;if (recHead->next == NULL) {printf("当前收支信息为空,无法继续排序!\n\n");return;}printf("请输入需要排序的方式编号(1.按金额升序排序 2.按金额降序排序):");scanf("%d", &stype);if (stype < 1 || stype>2) {printf("排序收支信息失败,输入的编号不存在!\n\n");return;}while (recHead->next->next != pTemp) {pRec = recHead;qRec = recHead->next;while (qRec->next != pTemp) {if ((stype == 1 && qRec->data.money > qRec->next->data.money) || (stype == 2 && qRec->data.money < qRec->next->data.money)) {pRec->next = qRec->next;qRec->next = qRec->next->next;pRec->next->next = qRec;qRec = pRec->next;}qRec = qRec->next;pRec = pRec->next;}pTemp = qRec;}printf("+------------+------------+------------+------------+------------+------------+\n");printf("|%-12s|%-12s|%-12s|%-12s|%-12s|%-12s|\n", "编号", "家庭成员", "金额", "类型", "日期", "备注");printf("+------------+------------+------------+------------+------------+------------+\n");pRec = recHead;while (pRec->next != NULL) {pRec = pRec->next;printf("|%-12s|%-12s|%-12.2f|%-12s|%-12s|%-12s|\n", pRec->data.id, pRec->data.member, pRec->data.money, pRec->data.type, pRec->data.date, pRec->data.remark);printf("+------------+------------+------------+------------+------------+------------+\n");}printf("\n");
}
void statisRecordInfo(struct RecLinkNode* recHead, struct AssLinkNode* assHead) {//统计收支信息int i, j, flag, sobj, stype, scount = 0;float mtemp;char metemp[STR];struct RecLinkNode* pRec;struct Record input;struct AssLinkNode* pAss, * qAss, * pTemp = NULL;char member1[MAX][STR];float money1[MAX];int count1 = 0;char member2[MAX][STR];float money2[MAX];int count2 = 0;if (recHead->next == NULL) {printf("当前收支信息为空,无法继续统计!\n\n");return;}printf("+------------------------------+\n");printf("|  1.统计家庭月收支情况        |\n");printf("|  2.统计家庭月资产结余情况    |\n");printf("|  3.统计家庭年收入最大贡献者  |\n");printf("|  4.统计家庭年支出最大类型    |\n");printf("|  0.返回主菜单                |\n");printf("+------------------------------+\n");printf("请输入需要统计的对象编号:");scanf("%d", &sobj);if (sobj == 0) {return;}else if (sobj == 1 || sobj == 2) {printf("请输入统计的月份(yyyy-MM):");scanf("%s", input.date);}else if (sobj == 3 || sobj == 4) {printf("请输入统计的年份(yyyy):");scanf("%s", input.date);}else {printf("统计收支信息失败,输入的对象编号不存在!\n\n");return;}if (sobj == 1 || sobj == 2) {printf("请输入需要排序的方式编号(1.升序排序 2.降序排序):");scanf("%d", &stype);if (stype < 1 || stype>2) {printf("统计收支信息失败,输入的方式编号不存在!\n\n");return;}}if (sobj == 1) {//统计家庭月收支情况pRec = recHead;while (pRec->next != NULL) {pRec = pRec->next;if (strstr(pRec->data.date, input.date) != NULL) {if (pRec->data.money >= 0) {for (i = 0; i < count1; i++) {if (strcmp(member1[i], pRec->data.member) == 0) {break;}}if (i != count1) {money1[i] += pRec->data.money;}else {strcpy(member1[count1], pRec->data.member);money1[count1] = pRec->data.money;count1++;}}else {for (i = 0; i < count2; i++) {if (strcmp(member2[i], pRec->data.member) == 0) {break;}}if (i != count2) {money2[i] += pRec->data.money;}else {strcpy(member2[count2], pRec->data.member);money2[count2] = pRec->data.money;count2++;}}}}for (i = 0; i < count1 - 1; i++) {for (j = 0; j < count1 - i - 1; j++) {if ((stype == 1 && money1[j] > money1[j + 1]) || (stype == 2 && money1[j] < money1[j + 1])) {mtemp = money1[j];money1[j] = money1[j + 1];money1[j + 1] = mtemp;strcpy(metemp, member1[j]);strcpy(member1[j], member1[j + 1]);strcpy(member1[j + 1], metemp);}}}for (i = 0; i < count2 - 1; i++) {for (j = 0; j < count2 - i - 1; j++) {if ((stype == 1 && money2[j] > money2[j + 1]) || (stype == 2 && money2[j] < money2[j + 1])) {mtemp = money2[j];money2[j] = money2[j + 1];money2[j + 1] = mtemp;strcpy(metemp, member2[j]);strcpy(member2[j], member2[j + 1]);strcpy(member2[j + 1], metemp);}}}printf("+-------------------------+\n");printf("|   本月各成员的收入情况  |\n");printf("+------------+------------+\n");for (i = 0; i < count1; i++) {printf("|%-12s|%-12.2f|\n", member1[i], money1[i]);printf("+------------+------------+\n");}printf("\n");printf("+-------------------------+\n");printf("|   本月各成员的支出情况  |\n");printf("+------------+------------+\n");for (i = 0; i < count2; i++) {printf("|%-12s|%-12.2f|\n", member2[i], money2[i]);printf("+------------+------------+\n");}printf("\n");}else if (sobj == 2) {//统计家庭月资产结余情况pRec = recHead;while (pRec->next != NULL) {pRec = pRec->next;if (strstr(pRec->data.date, input.date) != NULL) {for (i = 0; i < count1; i++) {if (strcmp(member1[i], pRec->data.member) == 0) {break;}}if (i != count1) {money1[i] += pRec->data.money;}else {strcpy(member1[count1], pRec->data.member);money1[count1] = pRec->data.money;count1++;}}}for (i = 0; i < count1 - 1; i++) {for (j = 0; j < count1 - i - 1; j++) {if ((stype == 1 && money1[j] < money1[j + 1]) || (stype == 2 && money1[j] > money1[j + 1])) {mtemp = money1[j];money1[j] = money1[j + 1];money1[j + 1] = mtemp;strcpy(metemp, member1[j]);strcpy(member1[j], member1[j + 1]);strcpy(member1[j + 1], metemp);}}}printf("+--------------------------------------+\n");printf("|         本月家庭资产结余情况         |\n");printf("+------------+------------+------------+\n");printf("|%-12s|%-12s|%-12s|\n", "编号", "家庭成员", "总资产");printf("+------------+------------+------------+\n");for (i = 0; i < count1; i++) {printf("|%-12d|%-12s|%-12.2f|\n", i + 1, member1[i], money1[i]);printf("+------------+------------+------------+\n");}printf("\n");printf("+--------------------------------------+\n");printf("|       本月家庭资产结余为负情况       |\n");printf("+------------+------------+------------+\n");printf("|%-12s|%-12s|%-12s|\n", "编号", "家庭成员", "总资产");printf("+------------+------------+------------+\n");flag = 0;for (i = 0, j = 0; i < count1; i++) {if (money1[i] < 0) {printf("|%-12d|%-12s|%-12.2f|\n", ++j, member1[i], money1[i]);printf("+------------+------------+------------+\n");flag = 1;}}if (flag == 1) {printf("请输入需要查看收支明细的指定家庭成员:");scanf("%s", input.member);flag = 0;pRec = recHead;while (pRec->next != NULL) {pRec = pRec->next;if (strcmp(pRec->data.member, input.member) == 0 && strstr(pRec->data.date, input.date) != NULL) {if (flag == 0) {printf("+------------+------------+------------+------------+------------+------------+\n");printf("|                                  收支明细                                   |\n");printf("+------------+------------+------------+------------+------------+------------+\n");printf("|%-12s|%-12s|%-12s|%-12s|%-12s|%-12s|\n", "编号", "家庭成员", "金额", "类型", "日期", "备注");printf("+------------+------------+------------+------------+------------+------------+\n");flag = 1;}printf("|%-12s|%-12s|%-12.2f|%-12s|%-12s|%-12s|\n", pRec->data.id, pRec->data.member, pRec->data.money, pRec->data.type, pRec->data.date, pRec->data.remark);printf("+------------+------------+------------+------------+------------+------------+\n");}}printf("\n");}else {printf("当前暂无家庭资产结余为负情况!\n\n");}}else if (sobj == 3) {//统计家庭年收入最大贡献者pRec = recHead;while (pRec->next != NULL) {pRec = pRec->next;if (strstr(pRec->data.date, input.date) != NULL) {if (pRec->data.money >= 0) {for (i = 0; i < count1; i++) {if (strcmp(member1[i], pRec->data.member) == 0) {break;}}if (i != count1) {money1[i] += pRec->data.money;}else {strcpy(member1[count1], pRec->data.member);money1[count1] = pRec->data.money;count1++;}}}}for (i = 0; i < count1 - 1; i++) {for (j = 0; j < count1 - i - 1; j++) {if (money1[j] < money1[j + 1]) {mtemp = money1[j];money1[j] = money1[j + 1];money1[j + 1] = mtemp;strcpy(metemp, member1[j]);strcpy(member1[j], member1[j + 1]);strcpy(member1[j + 1], metemp);}}}printf("+-------------------------+\n");printf("|    本年收入最大贡献者   |\n");printf("+------------+------------+\n");printf("|%-12s|%-12.2f|\n", member1[0], money1[0]);printf("+------------+------------+\n");printf("\n");}else if (sobj == 4) {//统计家庭年支出最大类型pRec = recHead;while (pRec->next != NULL) {pRec = pRec->next;if (strstr(pRec->data.date, input.date) != NULL) {if (pRec->data.money < 0) {for (i = 0; i < count2; i++) {if (strcmp(member2[i], pRec->data.type) == 0) {break;}}if (i != count2) {money2[i] += pRec->data.money;}else {strcpy(member2[count2], pRec->data.type);money2[count2] = pRec->data.money;count2++;}}}}for (i = 0; i < count2 - 1; i++) {for (j = 0; j < count2 - i - 1; j++) {if (money2[j] > money2[j + 1]) {mtemp = money2[j];money2[j] = money2[j + 1];money2[j + 1] = mtemp;strcpy(metemp, member2[j]);strcpy(member2[j], member2[j + 1]);strcpy(member2[j + 1], metemp);}}}printf("+-------------------------+\n");printf("|     本年支出最大类型    |\n");printf("+------------+------------+\n");printf("|%-12s|%-12.2f|\n", member2[0], money2[0]);printf("+------------+------------+\n");printf("\n");}
}
void statisAssetsInfo(struct RecLinkNode* recHead, struct AssLinkNode* assHead) {//统计资产信息int i;struct Assets temp;struct RecLinkNode* pRec;struct AssLinkNode* pAss, * qAss;char member[MAX][STR];float money[MAX];int count = 0;pRec = recHead;while (pRec->next != NULL) {pRec = pRec->next;for (i = 0; i < count; i++) {if (strcmp(member[i], pRec->data.member) == 0) {break;}}if (i != count) {money[i] += pRec->data.money;}else {strcpy(member[count], pRec->data.member);money[count] = pRec->data.money;count++;}}assHead->next = NULL;pAss = assHead;for (i = 0; i < count; i++) {temp.id = i + 1;strcpy(temp.member, member[i]);temp.money = money[i];qAss = (struct AssLinkNode*)malloc(sizeof(struct AssLinkNode));qAss->data = temp;qAss->next = NULL;pAss->next = qAss;pAss = pAss->next;}
}
struct User userLoginRegister(struct UseLinkNode* useHead, int* login) {//用户登陆与注册int choice;int isFlag;struct UseLinkNode* pUse, * qUse;int running = 1;struct User input;while (running) {printf("==============================================\n");printf("=                家庭记账系统                =\n");printf("=--------------------------------------------=\n");printf("=                                            =\n");printf("=                 1.用户登陆                 =\n");printf("=                 2.用户注册                 =\n");printf("=                 0.退出系统                 =\n");printf("=                                            =\n");printf("==============================================\n");printf("请输入您需要执行的功能编号:");scanf("%d", &choice);switch (choice) {case 0:*login = 0;running = 0;break;case 1:printf("请输入您的用户名:");scanf("%s", input.username);printf("请输入您的密码:");scanf("%s", input.password);pUse = useHead;isFlag = 0;while (pUse->next != NULL) {pUse = pUse->next;if (strcmp(pUse->data.username, input.username) == 0 && strcmp(pUse->data.password, input.password) == 0) {isFlag = 1;break;}}if (isFlag) {input = pUse->data;running = 0;*login = 1;}else {printf("很抱歉,登陆失败,您输入的用户名或密码不正确!\n\n");}break;case 2:printf("请输入您的用户名:");scanf("%s", input.username);pUse = useHead;isFlag = 0;while (pUse->next != NULL) {pUse = pUse->next;if (strcmp(pUse->data.username, input.username) == 0) {isFlag = 1;break;}}if (!isFlag) {printf("请输入您的密码:");scanf("%s", input.password);qUse = (struct UseLinkNode*)malloc(sizeof(struct UseLinkNode));qUse->data = input;qUse->next = NULL;pUse->next = qUse;saveUserInfo(useHead);printf("恭喜您,注册成功,欢迎使用家庭记账系统!\n\n");}else {printf("很抱歉,注册失败,您输入的用户名已存在!\n\n");}break;default:printf("您输入的功能编号不存在,请重新输入!\n\n");break;}if (running) {system("pause");system("cls");}}return input;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47423314/article/details/112384709
————————————————
版权声明:本文为CSDN博主「程序员本员」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_47423314/article/details/112384709
int main() {//主函数int choice;int running = 1;struct User user;struct UseLinkNode* useHead;struct RecLinkNode* recHead;struct AssLinkNode* assHead;useHead = (struct UseLinkNode*)malloc(sizeof(struct UseLinkNode));useHead->next = NULL;recHead = (struct RecLinkNode*)malloc(sizeof(struct RecLinkNode));recHead->next = NULL;assHead = (struct AssLinkNode*)malloc(sizeof(struct AssLinkNode));assHead->next = NULL;readUserInfo(useHead);readRecordInfo(recHead);readAssetsInfo(assHead);user = userLoginRegister(useHead, &choice);if (choice == 1) {system("cls");while (running) {printf("==============================================\n");printf("=                家庭记账系统                =\n");printf("=--------------------------------------------=\n");printf("=                                            =\n");printf("=               1.添加收支信息               =\n");printf("=               2.修改收支信息               =\n");printf("=               3.删除收支信息               =\n");printf("=               4.查询收支信息               =\n");printf("=               5.排序收支信息               =\n");printf("=               6.统计收支信息               =\n");printf("=               0.退出系统                   =\n");printf("=                                            =\n");printf("==============================================\n");printf("请输入您需要执行的功能编号:");scanf("%d", &choice);switch (choice) {case 0:running = 0;break;case 1:addRecordInfo(recHead);saveRecordInfo(recHead);statisAssetsInfo(recHead, assHead);saveAssetsInfo(assHead);break;case 2:modifyRecordInfo(recHead);saveRecordInfo(recHead);statisAssetsInfo(recHead, assHead);saveAssetsInfo(assHead);break;case 3:deleteRecordInfo(recHead);saveRecordInfo(recHead);statisAssetsInfo(recHead, assHead);saveAssetsInfo(assHead);break;case 4:queryRecordInfo(recHead, assHead);break;case 5:sortRecordInfo(recHead);break;case 6:statisRecordInfo(recHead, assHead);break;default:printf("您输入的功能编号不存在,请重新输入!\n\n");break;}if (running) {system("pause");system("cls");}}}printf("感谢您的使用,再见!~\n");return 0;
}

数据结构大作业-家庭记账系统相关推荐

  1. 数据结构大作业——银行排队系统

    数据结构大作业--银行排队系统 离散事件模拟--银行业务处理 题目分析 声明部分 辅助函数 初始化窗口节点 创建顾客节点 比较四个窗口的排队人数 输出离开顾客的信息 主要函数 完整的头文件代码 离散事 ...

  2. C/C++《数据结构大作业》

    C/C++<数据结构大作业> 要求 一.作业目的 1. 掌握用数据结构的知识进行程序设计. 2. 应用所学的数据结构完成一个具有一定实际意义的应用程序的设计.编码.调试,锻炼实践动手能力, ...

  3. CC++《数据结构大作业》

    C/C++<数据结构大作业> 要求 一.作业目的 1. 掌握用数据结构的知识进行程序设计. 2. 应用所学的数据结构完成一个具有一定实际意义的应用程序的设计.编码.调试,锻炼实践动手能力, ...

  4. 数据结构大作业-班级考勤管理系统

    简介 此程序是本人大二时期的数据结构大作业,初学数据结构和算法后所编写的一个程序,是一个班级考勤管理系统,可实现班级考勤信息的管理. 本程序使用C语言编写,使用Visual Studio 2019进行 ...

  5. 校园导航系统java具有gui,[数据结构大作业]HBU Guide 河北大学校园导航

    [数据结构大作业]HBU Guide 河北大学校园导航 校园导航问题 实验报告介绍: 博客园 https://www.cnblogs.com/hx97/p/11967398.html CSDN htt ...

  6. 数据结构大作业:纯C双链表实现贪吃蛇

    整理电脑文件资料,发现的自己18年(大一下学期)写的数据结构大作业贪吃蛇.时光流逝,转眼间2年就过去了. 老师意见:有存档功能,就能满分了. 看代码,借思路,独自实现,成长自己. 游戏效果图如下: 代 ...

  7. C语言霍夫曼编码压缩,数据结构大作业——哈夫曼编码压缩BMP格式文件

    数据结构大作业--哈夫曼编码压缩BMP格式文件 首先需要了解BMP图像格式 BMP图像格式详解 其次需要了解哈夫曼编码如何对BMP文件进行压缩 哈夫曼压缩与解压缩 编程部分 使用的头文件 虽然这里用了 ...

  8. HTML5期末大作业:订餐系统网站设计——绿色的网上订餐系统(23个页面) 网页作品 订餐系统网页设计作业模板 学生网页制作源代码下载

    HTML5期末大作业:订餐系统网站设计--绿色的网上订餐系统(23个页面) 网页作品 订餐系统网页设计作业模板 学生网页制作源代码下载 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. ...

  9. [附源码]JAVA毕业设计家庭记账系统(系统+LW)

    [附源码]JAVA毕业设计家庭记账系统(系统+LW) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(In ...

  10. 数据结构大作业--迷宫问题

    数据结构大作业–迷宫问题 上图: 代码有详细注解 迷宫自动生成问题单独讨论 当然由于出口随机的原因右小概率会出现bug(这无伤大雅) 首先我们都知道,迷宫只有一条正确的道路. 这个时候请把自己想象成一 ...

最新文章

  1. 直播 | 帝国理工王剑虹:配电网中用多智能体强化学习进行的主动电压控制
  2. python 对axis的理解
  3. Windows 7 安装 .NET 5 / .NET Core 3.1 环境的方法和依赖文件
  4. android 存储方式简书,Android的多种数据存储方式
  5. opencv画框返回坐标 python_20行Python代码实现视频字符化
  6. 小米集团国际总部落地深圳;国美电器创始人黄光裕出狱;TiKV 4.0 发布 | 极客头条...
  7. 【Ajax技术】解决XHR与中文乱码问题
  8. 遇见Python.h: No such file or directory的解决方法
  9. wx.getStorage异步和wx.getStorageSync同步区别
  10. RPA机器人如何调用USB SERVER
  11. 网赚必备单页面淘宝客网赚源码,专业销售网赚教程
  12. 这份Java日志格式规范,拿走不谢!
  13. 细胞工程-6-原生质体分离核体细胞杂交
  14. python调包师_为“Python调包侠” 画像
  15. docker安装nfs文件服务所需镜像,centos7安装nfs所需的安装包
  16. 一个表情包引发的悬案!
  17. K-mean(多维度)聚类算法(matlab代码)
  18. 痛苦的时候,不妨默读“有容乃大”
  19. 电力变电站三维可视化
  20. python循环里使用len()与计算出len()后速度有区别吗

热门文章

  1. linux服务器发异常包,如何排查Linux服务器上的恶意发包行为
  2. Java serialVersionUID
  3. 关于U盘免疫的一些自我认识
  4. 中国互联网的5大生死逻辑
  5. PostgreSQL 10.1 手册
  6. 编写第一个Windows Mobile程序
  7. nginx 日志格式打印
  8. 期末复习—计算机组成原理—计算机的分类
  9. 3d显卡2003测试软件,3DMark 2003
  10. Dos系统功能的调用