个人账户管理系统
来源:互联网 发布:c语言最长升序片段 编辑:程序博客网 时间:2024/04/30 12:38
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//文件保存路径
#define FilePath1 "Myfile.dat"
#define FilePath2 "Myfile.txt"
//查询用声明
#define Ok 1 //宏定义
#define Error 0 //宏定义
#define Notfind 2 //宏定义
//定义个人基本信息结构体变量
//c代表const费用
//ele代表electricity电
typedef struct
{
int month; //定义月份
int food_c; //定义食品费用
int rent_c; //定义房租费用
int children_c; //定义子女费用
int water_ele_c;//定义水电费用
int hospital_c; //定义医疗费用
int carring_c; //定义存储费用
int income_c; //定义收入费用
}Infor;
typedef struct
{//定义链接查询的结构体变量
int number;
int data;
}Type;
int mode;//定义字符型(选择的操作模式)
void Show_open_picture(void); //声明显示开机画面函数
void Show_personal_infomation(void); //声明个人管理系统功能提示及操作函数
void Show_close_infomation(void); //声明关闭个人管理系统函数
void Input(Infor *); //声明接收按键输入的数据函数
void WriteInfor(Infor *); //声明向文件内写入内容的函数
void ChangeFormat(void); //声明将dat格式文件转换为txt文件
int Search(Infor *); //声明查询函数(返回查询的结果及状态)
void Sort(Infor *); //声明排序函数
void Sum_const(Infor *); //声明消费之和函数
void Modify(Infor *, int); //声明修改数据函数
void Delete(int); //声明删除数据函数
void Search_one(Infor *); //声明收缩单个错误函数
int main(void)
{/*主函数*/
Show_open_picture(); /*调用开机画面函数*/
printf("请按Enter建进入个人管理系统---------------------->");
getchar();
system("cls"); /*调用系统清屏函数*/
while(1)
{
Show_personal_infomation(); /*调用个人管系统功能提示及操作函数*/
}
return 0;
}
void Show_open_picture(void)
{/*显示开机画面*/
system("color d");
printf("<------------------------------------------------>\n");
printf("**\t\t\t\t\t\t**\n");
printf("**\t\t欢迎使用个人管理系统\t\t**\n");
printf("**\t\t\t\t\t\t**\n");
printf("<------------------------------------------------>\n");
printf("**\t\t个人管理系统设计人基本信息\t**\n");
printf("**\t\t河南科技学院新科学院\t\t**\n");
printf("**\t\t信工系-计科111班\t\t**\n");
printf("**\t\t1、杨帅\t\t\t\t**\n");
printf("**\t\t2、宋晓东\t\t\t**\n");
printf("**\t\t3、张卫东\t\t\t**\n");
printf("<------------------------------------------------>\n");
printf("<------------------------------------------------>\n\n");
}
void Show_close_infomation(void)
{/*关闭个人管理系统*/
system("cls"); /*调用系统清屏函数*/
system("color a");
printf("\t请输入Enter键关闭个人管理系统\t\t\n");
getchar();
printf("<------------------------------------------------>\n");
printf("<------------------------------------------------>\n");
printf("**\t\t\t\t\t\t**\n");
printf("**\t\t\t\t\t\t**\n");
printf("**\t\t\t\t\t\t**\n");
printf("**\t\t欢迎下次使用个人管理系统\t**\n");
printf("**\t\t\t\t\t\t**\n");
printf("**\t\t\t\t\t\t**\n");
printf("**\t\t\t\t\t\t**\n");
printf("<------------------------------------------------>\n");
printf("<------------------------------------------------>\n\n");
exit(0);
}
void Show_personal_infomation(void)
{/*个人管理系统功能提示及操作*/
int mode; //定义字符型(选择的操作模式)
int mon; //定义整形
int flag; //标记错与与否
int choice; //修改的模式
Infor *data;
data = (Infor *)malloc(sizeof(Infor));
do
{
system("cls"); /*调用系统清屏函数*/
system("color b");
printf("<------------------------------------------------>\n");
printf("**\t\t\t\t\t\t**\n");
printf("**\t 欢迎进入个人账簿管理系统 \t**\n");
printf("**\t\t\t\t\t\t**\n");
printf("<------------------------------------------------>\n");
printf("<------------------------------------------------>\n");
printf("**\t1、输入数据\t\t2、查看数据\t**\n");
printf("**\t3、修改数据\t\t4、查询数据\t**\n");
printf("**\t5、排序数据\t\t6、删除数据\t**\n");
printf("**\t7、求和数据\t\t0、退出系统\t**\n");
printf("<------------------------------------------------>\n");
printf("<------------------------------------------------>\n\n");
printf("\t\t请输入要进行的操作:\n");
scanf("%d", &mode);
}while(mode > 8 || mode < -1);
switch(mode)
{
case 1://1、输入数据
mode = Search(data); //赋值
if(mode == Ok)
printf("已经存在该月份\n");
else
{
Input(data); //调用输入数据函数
WriteInfor(data); //调用向文件内写入内容函数
}
system("pause"); //调用按任意按键输出函数
system("color d");
break;
case 2://2、查看数据
ChangeFormat(); //调用查看数据函数
system("pause");
system("color e");
break;
case 3://3、修改数据
system("color 3");
mode = Search(data); //赋值
mon = data->month; //赋值
if(mode != Ok) printf("\n没有符合条件的记录\n");
else
{
printf("\n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入\n");//输出
printf("<---------------------------------------------------------------------->\n");
printf("%7d %8d %8d %8d %8d %8d %8d %8d\n", data->month, data->food_c, data->rent_c,
data->children_c, data->water_ele_c, data->hospital_c, data->carring_c, data->income_c);
printf("<---------------------------------------------------------------------->\n");
do{
printf("请输入选择的模式:\t(1):修改该所有的数据\t(2) :修改单个数据\n");
scanf("%d", &choice);
}while(choice < 0 || choice > 3);
switch(choice)
{
case 1:
do{
Input(data);
printf("\n输入数据是否成功!\n如果成功请入 0 (退出)!\n如果失败请输入 1 (重新输入数据)!\n");
scanf("%d", &flag);
printf("\n");
}while(flag != 0);//调用输入数据函数
Modify(data, mon); //调用修改数据函数
break;
case 2:
do{
Search_one(data);
printf("\n输入数据是否成功!\n如果成功请入 0 (退出)!\n如果失败请输入 1 (重新输入数据)!\n");
scanf("%d", &flag);
printf("\n");
}while(flag != 0);//调用输入数据函数
Modify(data, mon); //调用修改数据函数
break;
}
}
system("pause");
break;
case 4://4、查询数据
system("color e");
mode = Search(data);
if(mode != Ok) printf("\n没有符合条件的记录\n");
else
{
printf("\n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 \n");//输出
printf("<---------------------------------------------------------------------->\n");
printf("%7d %8d %8d %8d %8d %8d %8d %8d\n", data->month, data->food_c, data->rent_c,
data->children_c, data->water_ele_c, data->hospital_c, data->carring_c, data->income_c);
}
system("pause");
break;
case 5://5、排序数据
system("color ff");
mode = Search(data);//复制
if(mode != Ok) printf("\n没有符合条件的记录!\n"); //判断输出
else Sort(data); //调用排序函数
system("pause");
break;
case 6://6、删除数据
system("color a");
mode = Search(data);//复制
mon = data->month; //复制
if(mode != Ok) printf("\n没有符合条件的记录!\n"); //判断输出
else
{
printf("\n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 \n");//输出
printf("<---------------------------------------------------------------------->\n");
printf("%7d %8d %8d %8d %8d %8d %8d %8d\n", data->month, data->food_c, data->rent_c,
data->children_c, data->water_ele_c, data->hospital_c, data->carring_c, data->income_c);
Delete(mon);//调用输入数据函数
}
system("pause");
break;
case 7://7、求本月消费之和
system("color a");
mode = Search(data);//赋值
if(mode != Ok) printf("\n没有符合条件的记录!\n"); //判断输出
else Sum_const(data);
system("pause");
break;
case 0://0、退出系统
getchar(); //调用系统函数
Show_close_infomation();//调用关机画面函数
system("color c");
break;
}
free(data);//释放内存空间
}
void Input(Infor *newI)
{//声明接收按键输入的数据函数
do{
printf("\n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 \n");//输出
scanf("%7d %8d %8d %8d %8d %8d %8d %8d", &newI->month, &newI->food_c, &newI->rent_c,
&newI->children_c, &newI->water_ele_c, &newI->hospital_c, &newI->carring_c, &newI->income_c);
fflush(stdin);//系统函数调用(即清理标准输入流,把多余的仍未被保存的数据丢掉)
}while(newI->month < 1 || newI->month > 12);
}
void WriteInfor(Infor *new1)
{//声明向文件内写入内容的函数
FILE *fp;//定义指针
fp = fopen(FilePath1, "ab+");//打开或创建一个二进制文件,可读取或在文件的尾部添加数据
if(fp == NULL)//判断文件是否为空
{
printf("无法创建文件:%s\n", FilePath1);
exit(0);
}
//从new1所指向的数据存储区获取数据,向fp所指向的文件写入数据,每次写sizeof(Infor)个字节,写入1次
fwrite(new1, sizeof(Infor), 1, fp);//这里可以做特别处理可防止存在同一月份有2条以上的记录问题。
fclose(fp); //关闭文件,避免内存泄露
printf("数据存入文件成功!\n");
}
void ChangeFormat(void)
{//声明将dat格式文件转换为txt文件
FILE *fp1, *fp2;//定义文件指针
Infor *data; //定义结构指针
data = (Infor *)malloc(sizeof(Infor));//开辟空间
fp1 = fopen(FilePath1, "rb+"); //打开一个二进制文件,可读取或写入其中数据
if(fp1 == NULL)
{
printf("无法找到文件:%s\n", FilePath2);//输出
return; //返回主函数
}
fp2 = fopen(FilePath2, "wt+");
if(fp2 == NULL)
{
printf("无法创建文件:%s\n", FilePath2);
return;//返回主函数
}
fputs("\n个人账簿管理系统\n", fp2);
fputs("记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 \n",fp2);
printf("\n记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入 \n");//输出
printf("<---------------------------------------------------------------------->\n");//输出
rewind(fp1);//函数调用(将文件内部的位置指针重新指向一个流[数据流/文件])的开头
//从fp1所指向的文件读取数据,每次读取sizeof(Infor)个字节,读取1次,将读取的数据存储到data所指向的数据存储区
fread(data, sizeof(Infor), 1, fp1);
//feof(stream)函数有两个返回值,如果遇到文件结束,函数返回值为非零值,否则为0
while(!feof(fp1))
{
printf("%7d %8d %8d %8d %8d %8d %8d %8d\n", data->month, data->food_c, data->rent_c,
data->children_c, data->water_ele_c, data->hospital_c, data->carring_c, data->income_c);
//将数据写入fp2指向的文件
fprintf(fp2, "%7d %8d %8d %8d %8d %8d %8d %8d\n", data->month, data->food_c, data->rent_c,
data->children_c, data->water_ele_c, data->hospital_c, data->carring_c, data->income_c);
fread(data, sizeof(Infor), 1, fp1);
}
printf("<---------------------------------------------------------------------->\n");
fputs("关闭本程序继续原程序!\n", fp2);
fclose(fp1);//关闭文件
fclose(fp2);//关闭文件
remove(FilePath2);//删除文本文件
}
int Search(Infor *data)
{//声明查询函数(返回查询的结果及状态)
FILE *fp1; //定义文件指针
int mon, Find = 0; //定义整形数据
printf("请输入要查询的月份:");
scanf("%d", &mon);
fflush(stdin); //清楚缓冲区
fp1 = fopen(FilePath1, "rb+");//打开一个二进制文件,可读取或写入其中数据
if(fp1 == NULL)
{
printf("无法找到文件:%s\n", FilePath1);
return Error;//返回函数
}
rewind(fp1); //调用系统函数
fread(data, sizeof(Infor), 1, fp1);
while(!feof(fp1))//查询操作
{
if(data->month == mon)
{
Find = 1;//找到返回1
break; //结束操作
}
else
Find = 0;//没找到返回0
fread(data, sizeof(Infor), 1, fp1);
}
fclose(fp1); //关闭文件
if(Find)
return Ok;
else
return Error;
return Notfind;
}
/*收缩单个错误*/
void Search_one(Infor *data)
{
Type Sort_info[8] = {0}; //初值赋值为0
int num;
char Str_info[8][10] = {"记录月份", "食品消费", "房租费用", "子女费用",
"水电费用", "医疗费用", "储蓄费用", "本月收入"};
printf("<---------------------------------------------------------------------->\n");
printf(" 1 2 3 4 5 6 7 8\n");
printf("<---------------------------------------------------------------------->\n");
printf("记录月份 食品消费 房租费用 子女费用 水电费用 医疗费用 储蓄费用 本月收入\n");//输出
printf("<---------------------------------------------------------------------->\n\n");
printf("请输入要修改的单个位置消费记录:");
scanf("%d", &num);
Sort_info[0].data = data->month;
Sort_info[1].data = data->food_c;
Sort_info[2].data = data->rent_c;
Sort_info[3].data = data->children_c;
Sort_info[4].data = data->water_ele_c;
Sort_info[5].data = data->hospital_c;
Sort_info[6].data = data->carring_c;
Sort_info[7].data = data->income_c;
Sort_info[num - 1].number = num - 1;
printf("\n<---------------------------------------------------------------------->\n");
printf("请输入要修改%s记录:", Str_info[Sort_info[num - 1].number]);
scanf("%d", &Sort_info[num - 1].data);
data->month = Sort_info[0].data;
data->food_c = Sort_info[1].data;
data->rent_c = Sort_info[2].data;
data->children_c = Sort_info[3].data;
data->water_ele_c = Sort_info[4].data;
data->hospital_c = Sort_info[5].data;
data->carring_c = Sort_info[6].data;
data->income_c = Sort_info[7].data;
}
void Sort(Infor *dat)
{//声明排序函数
int i = 0, j = 0; //定义整形变量
Type Sort_info[8] = {0}; //初值赋值为0
int temp; //作为中间变量
char Str_info[8][10] = {"记录月份", "食品消费", "房租费用", "子女费用",
"水电费用", "医疗费用", "储蓄费用", "本月收入"};
for(i = 0; i < 8; i++)
Sort_info[i].number = i;
Sort_info[0].data = dat->month;
Sort_info[1].data = dat->food_c;
Sort_info[2].data = dat->rent_c;
Sort_info[3].data = dat->children_c;
Sort_info[4].data = dat->water_ele_c;
Sort_info[5].data = dat->hospital_c;
Sort_info[6].data = dat->carring_c;
Sort_info[7].data = dat->income_c;
for(i = 1; i < 8; i++)//冒泡排序核心算法(由小到大排序)
{
for(j = 0; j < 8 - i; j++)
{
if(Sort_info[j].data > Sort_info[j + 1].data)
{ //交换位置,temp作为中间变量
temp = Sort_info[j].data;
Sort_info[j].data = Sort_info[j + 1].data;
Sort_info[j + 1].data = temp;
temp = Sort_info[j].number;
Sort_info[j].number = Sort_info[j + 1].number;
Sort_info[j + 1].number = temp;
}
}
}
printf("\n"); //输出
for(i = 0; i < 8; i++)
printf("%s ", Str_info[Sort_info[i].number]);
printf("\n<---------------------------------------------------------------------->\n");
for(i = 0; i < 8; i++)
printf("%6d ", Sort_info[i].data);
printf("\n");
}
void Sum_const(Infor *dat)
{//声明消费之和函数
int i = 0, sum = 0; //定义整形变量
Type Sort_info[9] = {0}; //初值赋值为0
char Str_info[9][10] = {"记录月份", "食品消费", "房租费用", "子女费用",
"水电费用", "医疗费用", "储蓄费用", "本月收入", "月消费和"};
for(i = 0; i < 9; i++)//为结构体变量赋值
Sort_info[i].number = i;
Sort_info[0].data = dat->month;
Sort_info[1].data = dat->food_c;
Sort_info[2].data = dat->rent_c;
Sort_info[3].data = dat->children_c;
Sort_info[4].data = dat->water_ele_c;
Sort_info[5].data = dat->hospital_c;
Sort_info[6].data = dat->carring_c;
Sort_info[7].data = dat->income_c;
for(i = 0; i < 8; i++)//循环求和
sum += Sort_info[i].data;
Sort_info[8].data = sum;
printf("\n"); //输出
for(i = 0; i < 9; i++)
printf("%s ", Str_info[Sort_info[i].number]);
printf("\n<------------------------------------------------------------------------------>\n");
for(i = 0; i < 9; i++)
printf("%6d ", Sort_info[i].data);
printf("\n");
}
void Modify(Infor *data, int mon)
{//声明修改数据函数
FILE *fp1, *fp2; //定义结构体指针
Infor *dat; //定义结构体指针
dat = (Infor *)malloc(sizeof(Infor));
fp1 = fopen(FilePath1, "rt"); //只读方式打开一个文本文件,只允许读数据
fp2 = fopen("temp.dat", "wt+"); //读写打开或创建一个文本文件,允许读写
rewind(fp1);//函数调用(将文件内部的位置指针重新指向一个流[数据流/文件])的开头
//从fp1所指向的文件读取数据,每次读取sizeof(Infor)个字节,读取1,将读取的数据存储到dat所指向
fread(dat, sizeof(Infor), 1, fp1);
while(!feof(fp1))//重写数据
{
if(dat->month == mon)//判断是否为要修改的月份
fwrite(data, sizeof(Infor), 1, fp2);// 修改数据
else
fwrite(dat, sizeof(Infor), 1, fp2);
fread(dat, sizeof(Infor), 1, fp1); //函数调用
}
fclose(fp1); //关闭文件
fclose(fp2); //关闭文件
remove(FilePath1); //删除原文件
rename("temp.dat", FilePath1);//重命名中间文件
printf("修改数据成功!\n");
ChangeFormat(); //显示数据
}
void Delete(int mon)
{//声明删除数据函数
FILE *fp1, *fp2; //定义文件的指针
Infor *dat; //定义结构体指针
dat = (Infor *)malloc(sizeof(Infor));
fp1 = fopen(FilePath1, "rt");
fp2 = fopen("temp.dat", "wt+");
rewind(fp1); //调用库函数
fread(dat, sizeof(Infor), 1, fp1);
while(!feof(fp1))
{
if(dat->month != mon)
fwrite(dat, sizeof(Infor), 1, fp2);
fread(dat, sizeof(Infor), 1, fp1);
}
fclose(fp1); //关闭文件
fclose(fp2); //关闭文件
remove(FilePath1); //调用库函数,删除源文件
printf("删除数据成功!\n");
ChangeFormat(); //显示数据
}
0 0
- 个人账户管理系统
- 基于kotlin实现的简单个人账户管理APP
- kotlin实现的简单个人账户管理APP(一) 数据库的实现
- kotlin实现的简单个人账户管理APP(二) 文件选择浏览/文件导入导出
- kotlin实现的简单个人账户管理APP(三) 自定义View仿支付宝的密码输入框/密码相关逻辑
- 苹果IOS开发者个人账户总结
- 资金安全责任险对个人账户负责?
- 管理系统
- 管理系统
- 管理系统
- 管理系统
- 商品管理录入管理系统
- 数据库管理系统的管理
- 中国养老金制度需要结构性改革 个人账户全民化
- apple IDP 个人账户升级到公司账户(转)
- PayPal账户类型-PayPal个人账户可以接受美金付款吗?
- IOS个人账户转公司账户,TPshop APP提交审核
- 学籍管理系统:系统说明书- -
- 09项目总结报告
- 自然数幂之和
- 【CS学习】——UML九种图
- 引用和指针的差异
- 使用API函数mouse_event可以模拟鼠标事件
- 个人账户管理系统
- 软件十三个文档的产生和划分
- kmp算法
- Hibernate 的工具类,及其注意的事项
- (2) 内连接、外连接
- Sublime Text 全程指南
- 使用Buildozer部署时,出现unknown option‘single-branch’错误的解决
- git ,github的简单使用步骤
- 快速模幂运算