共约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; jid-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