共约370行代码,撸了半天撸出来了

另附:学生成绩管理系统(附文档)

学生用餐管理系统

实现方式都不一样,可供参考.

班费收支系统

主要包含以下项目

班费收支编号,收入/支出,经办人.原因.金额.备注,余额;采用二进制文本的形式储存

实现有以下功能:

添加班费收支信息

浏览所有班费收支信息

按照不同字段(收支编号,原因等)查询班费收支信息

修改班费收支信息///这个对二进制的修改很麻烦,我就退而求其次了,把所有文本的内容读取出来,修改了之后再重新写入

扩展功能:

按某些字段进行排序浏览

不同收入和支出分别存放在不同的文件中

把文件中的收入和支出信息导入的程序中

当中还有很多做的不好的地方,代码重复率很高,我争取改进#include

#include

#include ///消息窗口处理的头文件,此源码只使用了其中的Sleep函数和清屏函数

#include ///字符串处理的头文件

#define maxn 500

typedef struct Class {

int id; //id

int kind; //收入\支出

char person[maxn]; //经手人

char result[maxn]; //原因

int amount; //数额

char tips[maxn]; //备注

} Class;

void Print(Class s) { ///对内容进行输出

printf("%5d%20d%20s%20s%20d%20s\n",s.id,s.kind,s.person,s.result,s.amount,s.tips);

};

void Init();

void Watch(); ///浏览

void Add(); ///添加

void Find(); ///查找

void Change(); ///修改

void Find1(int,Class*,int); //查找id

void Find2(int,Class*,int); //查找收入\输出,下面函数同理

void Find3(int,Class*,char*);

void Find4(int,Class*,char*);

void Find5(int,Class*,int);

void Input(); ///输入

int cmp1(const void*,const void*);

int cmp2(const void*,const void*);

int cmp3(const void*,const void*);

int cmp4(const void*,const void*);

int cmp5(const void*,const void*);

int cmp6(const void*,const void*);

int main() {

Input();

return 0;

}

void Init(){

printf("请注意,该操作将会清空收支信息!\n");

Sleep(1000);

printf("1.执行\n2.返回主菜单\n");

int flag;

scanf("%d",&flag);

if(flag==1){

FILE *fin = fopen("income.txt","wb"); ///用wb方式打开又关闭文件可生成此文件///

FILE *fout = fopen("expenditure.txt","wb");

fclose(fin);

fclose(fout);

printf("重置成功!\n");

Sleep(1000);

return;

}

else if(flag==2)

return;

else

printf("输入有误,默认返回主菜单\n");

Sleep(1000);

return;

}

void Change() {

FILE *fin = fopen("income.txt","rb");

FILE *fout = fopen("expenditure.txt","rb");

FILE *f;

Class s[maxn];

int i,j;

for(i=0; fread(&s[i],sizeof(Class),1,fin); i++);

for(j=0; fread(&s[i],sizeof(Class),1,fout); j++);

fclose(fin);

fclose(fout);

i += j;

int id;

int flag = 0;

printf("请输入ID:\n");

scanf("%d",&id);

for(j=0; j

if(s[j].id == id) {

flag = 1;

break;

}

printf(flag?"请按照经办人 收入(0)/支出(1) 原因 金额 备注的格式写入信息,写入后此ID所对应的信息为此时输入的内容\n":"该ID不存在\n");

Sleep(1000);

if(!flag)

return;

scanf("%s %d %s %d %s",s[j].person,&s[j].kind,s[j].result,&s[j].amount,s[j].tips);

fin = fopen("income.txt","wb");

fout = fopen("expenditure.txt","wb");

fclose(fin);

fclose(fout);

for(j=0; j

if(s[j].kind == 1) {

f = fopen("expenditure.txt","ab+");

} else

f = fopen("income.txt","ab+");

fwrite(&s[j],sizeof(Class),1,f);

fclose(f);

}

printf("修改成功,1S后返回上一菜单\n");

Sleep(1000);

}

void Watch() {

system("cls");

FILE *fin = fopen("income.txt","rb");

FILE *fout = fopen("expenditure.txt","rb");///收入和支出的文件指针

Class s[maxn];

int i,j;

for(i=0; fread(&s[i],sizeof(Class),1,fin); i++)///无限读取,直到文件读完为止,fread当文件已经读完或者读到EOF的时候返回0,这个式子才不成立,循环跳出

s[i].kind = 0;

for(j=0; fread(&s[i],sizeof(Class),1,fout); j++)

s[i].kind = 1;

fclose(fin);

fclose(fout);

i += j; ///此时i为收入和支出的总次数

next:

system("cls");

printf("请输入浏览方式:\n");

printf("1.按照ID排序\n");

printf("2.按照种类排序\n");

printf("3.按照经办人排序\n");

printf("4.按照原因排序\n");

printf("5.按照金额排序\n");

printf("6.按照备注排序\n");

int n; ///输入排序方式

scanf("%d",&n);

switch(n) {

case 1:

qsort(s,i,sizeof(s[0]),cmp1);///qsort为c语言内置快速排序函数,需要与比较函数cmp一同使用,位于头文件stdlib.h中,这里统一为从小到大排序

///cmp的具体写法有好几种,可以百度qsort cmp写法

///能实现对数组,数字,字符,结构体等多种数据类型排序

break;

case 2:

qsort(s,i,sizeof(s[0]),cmp2);

break;

case 3:

qsort(s,i,sizeof(s[0]),cmp3);

break;

case 4:

qsort(s,i,sizeof(s[0]),cmp4);

break;

case 5:

qsort(s,i,sizeof(s[0]),cmp5);

break;

case 6:

qsort(s,i,sizeof(s[0]),cmp6);

break;

default:

printf("输入错误,按照默认排序输出\n");

}

int balance = 0;///余额

for(j=0; j

Print(s[j]);

if(s[j].kind)

balance -= s[j].amount; ///计算余额

else

balance += s[j].amount;

}

printf("余额为:%5d\n",balance);

int juge; ///下一步操作

next1:

printf("返回主菜单请输入0\n");

printf("返回上一菜单请输入1\n");

scanf("%d",&juge);

if(juge==1) //判断是不是输入错误

goto next;

else if (juge != 0) {

printf("输入错误,请重新输入\n");

goto next1;

}

return;

}

void Add() {

Class s;

int flag;///判断要写入的数据种类

FILE *f;

while(1) {

system("cls");

printf("请输入要输入的数据种类:\n0.收入 1.支出 2.停止输入\n");

scanf("%d",&flag);

if(flag == 1) {

f = fopen("expenditure.txt","ab+");

s.kind = 1;

} else if(flag == 0) {

f = fopen("income.txt","ab+");

s.kind = 0;

} else {

if(flag!=2)

printf("输入错误请重新输入\n"),Sleep(1000);

else

break;

continue;

}

fseek(f, 0, SEEK_END); ///将文件指针移到文件末尾,方便追加输入

if(f == NULL)

printf("打开失败\n");

else {

printf("请按照班费收支编号(请注意保证编号唯一) 经办人 原因 金额 备注的格式写入");

printf("\n中间用空格隔开,如果没有备注请在备注栏写无,其他栏同理\n");

scanf("%d%s%s%d%s",&s.id,s.person,s.result,&s.amount,s.tips);

if(fwrite(&s,sizeof(Class),1,f)!=1)///将一个结构体以二进制写入文件

printf("保存失败");

else

printf("录入成功");

Sleep(1000);

}

fclose(f);

}

}

void Input() {

revert:

system("cls"); ///清屏函数

printf("*************班费收支系统*************\n");

printf("请按快捷键进行以下操作:\n");

printf("1 添加班费收支信息\n");

printf("2 浏览所有班费收支信息\n");

printf("3 按照不同字段查询班费收支信息\n");

printf("4 修改班费收支信息\n");

printf("5 退出系统\n");

printf("6 重置系统\n");

int input;

scanf("%d",&input);

switch(input) {

case 1:

Add();

break;

case 2:

Watch();

break;

case 3:

Find();

break;

case 4:

Change();

break;

case 5:

return;

case 6:

Init();

break;

default:

printf("输入错误,请重新输入\n");

Sleep(1000); ///消息框延迟1000ms显示

}

goto revert;

}

int cmp1(const void *a,const void *b) {

Class *c = (Class*)a;

Class *d = (Class*)b;

return c->id-d->id;

}

int cmp2(const void *a,const void *b) {

Class *c = (Class*)a;

Class *d = (Class*)b;

return c->kind-d->kind;

}

int cmp3(const void *a,const void *b) {

Class *c = (Class*)a;

Class *d = (Class*)b;

return strcmp(c->person,d->person);

}

int cmp4(const void *a,const void *b) {

Class *c = (Class*)a;

Class *d = (Class*)b;

return c->result-d->result;

}

int cmp5(const void *a,const void *b) {

Class *c = (Class*)a;

Class *d = (Class*)b;

return c->amount-d->amount;

}

int cmp6(const void *a,const void *b) {

Class *c = (Class*)a;

Class *d = (Class*)b;

return strcmp(c->tips,d->tips);

}

void Find() {

FILE *fin = fopen("income.txt","rb");

FILE *fout = fopen("expenditure.txt","rb");///收入和支出的文件指针

Class s[maxn];

int i,j;

for(i=0; fread(&s[i],sizeof(Class),1,fin); i++)

s[i].kind = 0;

for(j=0; fread(&s[i],sizeof(Class),1,fout); j++)

s[i].kind = 1;

fclose(fin);

fclose(fout);

i += j; ///此时i为收入和支出的总次数

int n;///输入的信息

char Buf[maxn];///查询的内容

int buf;///查询的内容

printf("请输入要查找的类别:\n");

printf("1.编号\n");

printf("2.收入\支出\n");

printf("3.经办人\n");

printf("4.原因\n");

printf("5.金额\n");

scanf("%d",&n);

getchar();

switch(n) {

case 1:

printf("请输入ID:\n");

scanf("%d",&buf);

Find1(i,&s[0],buf);

break;

case 2:

printf("请输入种类\n0.收入 1.支出\n");

scanf("%d",&buf);

Find2(i,&s[0],buf);

break;

case 5:

printf("请输入金额:\n");

scanf("%d",&buf);

Find5(i,&s[0],buf);

break;

case 3:

printf("请输入经手人:\n");

scanf("%s",Buf);

Find3(i,&s[0],Buf);

break;

case 4:

printf("请输入原因:\n");

scanf("%s",Buf);

Find4(i,&s[0],Buf);

break;

default:

printf("输入有误\n");

}

printf("3S后返回上一页\n");

Sleep(3000);

return;

}

void Find1(int n,Class* s,int x) { ///S为存储数据的结构体数组,n为数据总量,x为要查找的ID,下面同理

int i;

for(i=0; i

if(x == s[i].id)

Print(s[i]);

}

printf("输出完毕\n");

}

void Find2(int n,Class* s,int x) {

int i;

for(i=0; i

if(x == s[i].kind)

Print(s[i]);

}

printf("输出完毕\n");

}

void Find3(int n,Class* s,char a[]) {

int i;

for(i=0; i

if(strcmp(s[i].person,a) == 0)

Print(s[i]);

printf("输出完毕\n");

}

void Find4(int n,Class* s,char a[]) {

int i;

for(i=0; i

if(strcmp(s[i].result,a) == 0)

Print(s[i]);

printf("输出完毕\n");

}

void Find5(int n,Class* s,int x) {

int i;

for(i=0; i

if(x == s[i].amount)

Print(s[i]);

}

printf("输出完毕\n");

}

c语言作业班费收支管理系统,c语言班费收支系统-------二进制文件操作相关推荐

  1. 个人信息管理系统c语言作业,个人物品信息管理系统 C语言.doc

    个人物品信息管理系统 C语言 个人物品信息管理系统 C语言 #include #include #include #include typedef struct z1 /*定义数据结构*/ { cha ...

  2. 计算机毕业设计JAVA班费收支管理系统mybatis+源码+调试部署+系统+数据库+lw

    计算机毕业设计JAVA班费收支管理系统mybatis+源码+调试部署+系统+数据库+lw 计算机毕业设计JAVA班费收支管理系统mybatis+源码+调试部署+系统+数据库+lw 本源码技术栈: 项目 ...

  3. 汽车销售管理系统 c语言版 课程设计,汽车销售管理系统c语言版.docx

    Document serial number[NL89WT-NY98YT-NC8CB-NNUUT-NUT108] Document serial number[NL89WT-NY98YT-NC8CB- ...

  4. c语言地铁收费程序,地铁管理系统C语言源程序

    地铁管理系统C语言源程序,程序比较详细,可以下载看看 #include #include #include #include "api.h" #include "Subw ...

  5. c语言结构体老师信息管理系统,C语言课程设计职工信息管理系统结构体数组实现程序源代码.doc...

    word格式 整理版 学习参考 //C语言课程设计 职工信息管理系统-结构体数组实现 #include #include #include struct employee { char num[10] ...

  6. 学生信息管理系统c语言课设,学生信息管理系统C语言课设.doc

    学生信息管理系统C语言课设 目录 一.需求分析2 二.概要设计2 三.详细设计4 四.调试分析9 五.用户手册9 六.测试数据9 七.附录10 一.需求分析学生学籍管理系统用数据文件存放学生的学籍,可 ...

  7. c语言用链表实现成绩管理系统,C语言写的学生成绩管理系统(链表)

    <C语言写的学生成绩管理系统(链表)>由会员分享,可在线阅读,更多相关<C语言写的学生成绩管理系统(链表)(6页珍藏版)>请在人人文库网上搜索. 1.include#inclu ...

  8. c语言课程设计 职工信息管理系统,C语言课程设计-职工信息管理系统程序设计.doc...

    C语言课程设计-职工信息管理系统程序设计 C语言课程设计报告 设计题目:职工信息管理系统程序设计 课程设计评语2 目 录3 1.课程论文题目4 2.程序设计思路4 3.功能模块图5 4.数据结构设计5 ...

  9. 学籍信息管理系统c语言编程,学生学籍信息管理系统C语言设计.doc

    学生学籍信息管理系统C语言设计 学生学籍信息管理系统 目录 1.设计目的与要求 2.总体设计 3.详细设计 4.调试分析 5.总结 6.答辩记录 7.教师意见 8.附录主程序 1.设计目的与要求: 1 ...

最新文章

  1. 开源阅读书源_安卓开源无广告追书神器阅读App
  2. 【高精】Gift(jzoj(gz) 1763)
  3. [css] 你用过outline属性吗?它有什么运用场景
  4. android选择多个文件_一分钟合并多个Excel、PDF文件,3种方法任你选择,好用到没朋友...
  5. OJ1159: 最大的两个数(指针专题)(C语言)
  6. 基于STM32F103完成对SD卡的数据读取操作
  7. bt tracker服务器 相关内容
  8. matlab coder 安装,MATLAB Coder
  9. 提现微信和提现到支付宝
  10. Apollo客户端使用与配置解析
  11. 互联网观察:2021年2月信息流资讯类App月活排名分析
  12. http拨测是什么意思_网络性能拨测-网络传输速度体验检测系统有哪些指标?
  13. BootLoader是什么 转载至百度百科
  14. GRAIL Efficient Time Series Representation Learning论文阅读笔记(一)
  15. 常用网络图片url地址
  16. zcmu-1133: 第九章:致我们终将逝去的青春(dfs)
  17. dcoker常用命令
  18. Navicat导出数据库设计文档
  19. 浅显易懂的Java入门(一)【基本程序设计】
  20. WinCE电池驱动——使用LM339实现

热门文章

  1. CRM可以为企业解决哪些问题?
  2. 在html中使用ajax
  3. 三星电脑如何装linux系统软件,三星怎么在 Linux 操作系统下安装驱动程序
  4. STM32-(07):串行通信基础(164芯片)
  5. 职场霸凌已经这么猖獗了吗。。
  6. 爬取LOL模型以及动作软件
  7. Result Maps collection already contains value for 问题总结
  8. 有一个理财管理数据库,包括客户Client,资金账户Fund,经理人Manager,投资流水Investment,理财产品Product。(转)
  9. 【linux】通过/etc/rc5.d/文件注册开机启动项
  10. 【2018ccpc网络赛1008】【hdu6445】Search for Answer 题解