作业代码

#include "stdio.h"
#include "stdlib.h"   /*常用子程序*/
#include "dos.h"      /*Ms-dos和8086调用的一些常量和函数*/
#include "string.h"
#include "conio.h"




typedef struct xiaofei  /*定义消费情况*/
{
int year;   /*消费年份*/
int month;  /*消费月份*/  
    int day;   /*消费日*/
char  xfproject[20];  /*消费项目名称*/
int  money;    /*消费金额*/
}xiaofei;




typedef  struct  Info   /*定义记录类型*/
{
char  no[6];          /*学号*/
char  name[15];       /*姓名*/
char  sex[2];         /*性别*/
char  tel[15];        /*电话*/
struct xiaofei  xf[20];  /*消费记录,最多20笔  */
}Info;


typedef  struct node  /*定义链表的节点结构*/
{
struct Info  data;
struct node  *next;
} Node, *link;




int main()
{
void  stringinput();  /*自定义字符串检测函数*/
void  enter(link l);         /*录入函数*/
void  del(link l);           /*信息删除函数*/
void  search(link l);        /*查询函数*/
void  list(link l);          /*列表函数*/
void  save(link l);          /*保存函数*/
void   load(link l);         /*读取函数*/
void   count(link l);        /*统计函数*/
void  add(link l);     /*添加函数*/
void others(link l);         /*其他功能*/
int   menu_select();         /*菜单函数*/
    /*主体*/
link  l;
l=(Node  *)malloc(sizeof(Node));
l->data.xf->year=0;
if(!l)
{  
printf("\n没有申请到内存!");
return -1;
}
l->next=NULL;
system("cls");  /*清屏*/
while(1)
{
system("cls");
switch(menu_select())
{
case  1:   enter(l);   break; 
   case  5:   add(l);   break; 
case  6:   list(l);   break; 
case  4:   search(l);   break; 
case  2:   save(l);   break; 
case  3:   load(l);   break; 
case  7:   del(l);  break;
case  8:   count(l);  break;
case  9:   others(l);  break;
case  0:   exit(0);
}
}



}


/*菜单函数*/
int menu_select()  
{
int i;
printf("\n\n\n\t     ****************我的管家婆财务管理系统****************\n");
printf("\t     |*                                                  *|\n");
printf("\t     |*                                                  *|\n");
printf("\t     |*              0 退出系统                          *|\n");
printf("\t     |*              1 基本信息录入                      *|\n");
printf("\t     |*              2 保存信息                          *|\n");
printf("\t     |*              3 装载                              *|\n");
printf("\t     |*              4 查询                              *|\n");
printf("\t     |*              5 添加信息                          *|\n");
printf("\t     |*              6 显示                              *|\n");
printf("\t     |*              7 删除                              *|\n");
printf("\t     |*              8 统计                              *|\n");
printf("\t     |*              9 其他功能                          *|\n");
printf("\t     |*                                                  *|\n");
printf("\t     |*                                                  *|\n");
printf("\t     ******************************************************\n");
printf("\t     |*     设计者:CWL     版本:v1.0    2015-07-29     *|\n");
printf("\t     ******************************************************\n");
printf("\n\t     请选择菜单:");
scanf("%d",&i);
return i;
}    


/*录入函数*/
void  enter(link l)      
{
int i=0;
int judge=1;
link curr;
if(l->data.xf->year!=0)
{
printf("信息表内已有信息,请使用添加删除操作对信息表进行修改或将信息表清空后再进行输入!\n");
printf("按回车返回");
getchar();
getchar();
return;
}
curr=l;
if(l==NULL)
{
l=(Node*)malloc(sizeof(Node));
l->data.xf->year=0;
}
while(judge==1)
{
printf("请输入学号:");
scanf("%s",curr->data.no);
printf("请输入姓名:");
scanf("%s",curr->data.name);
printf("请输入性别(f/m):");
scanf("%s",curr->data.sex);
while(*(curr->data.sex)!='f'&&*(curr->data.sex)!='m')
{
printf("输入错误,请输入f代表女性,m代表男性:");
scanf("%s",curr->data.sex);
}
printf("请输入电话号码:");
scanf("%s",curr->data.tel);
printf("请输入您的消费记录,每笔消费记录中当年份输入0时退出!\n");
i=0;
while(i<20)
{
printf("第%d笔:  年份:",i+1);
scanf("%d",&(curr->data.xf[i].year));
if(curr->data.xf[i].year==0)break;
printf("月份:");
scanf("%d",&(curr->data.xf[i].month));
printf("日:");
scanf("%d",&(curr->data.xf[i].day));
printf("消费项目名称:");
scanf("%s",&(curr->data.xf[i].xfproject));
printf("消费金额(必须为整数):");
scanf("%d",&(curr->data.xf[i].money));
i++;
}
printf("该学生的消费信息输入完毕,是否输入下一个学生的消费信息(输入1代表是,输入2代表否):\n");
scanf("%d",&judge);
if(judge==1)
{
curr->next=(Node  *)malloc(sizeof(Node));
curr=curr->next;
curr->next=NULL;
}
}
}
 
/*删除函数*/
void  del(link l)           /*信息删除函数*/
{
int judge=1;
link curr=l;
link temp;
char tname[15];
printf("请输入需要删除的学生姓名:");
scanf("%s",tname);
if(l->data.name==tname)
{
judge=0;
l=l->next;
free(curr);
}
if(l==NULL)
{
l=(Node*)malloc(sizeof(Node));
l->data.xf->year=0;
}
while(curr!=NULL)
{
if(strcmp(curr->next->data.name,tname)==0)
{
judge=0;
temp=curr->next;
curr->next=curr->next->next;
free(temp);
}
curr=curr->next;
}
if(judge==1)
{
printf("未找到相关记录.\n");
}
else
{
printf("删除完毕.\n");
}
printf("按回车返回");
getchar();
getchar();
}


/*查询函数*/
void  search(link l)     /*查询函数*/
{
char tname[15];
link curr=l;
int i=0,total=0;
printf("输入要查询的姓名:");
scanf("%s",tname);
while(curr!=NULL&&strcmp(curr->data.name,tname)!=0)
{
curr=curr->next;
}
if(curr==NULL)
{
printf("未找到相关记录.\n");
getchar();
getchar();
return;
}
printf("|学号:%-18s姓名:%-11s 性别:",curr->data.no,curr->data.name);
if(curr->data.sex=="f")printf("女   ");
else printf("男   ");
printf("电话:%-20s|\n",curr->data.tel);
printf("|-----------------------------------------------------------------------------|\n");
for(i=0;curr->data.xf[i].year!=0&&i<20;i++)
{
printf("|日期:%d-%d -%-5d      消费项目名称:%-16s金额:%-8d\t      |\n",curr->data.xf[i].year,curr->data.xf[i].month,curr->data.xf[i].day,curr->data.xf[i].xfproject,curr->data.xf[i].money);
total=total+(curr->data.xf[i].money);
}
printf("|-----------------------------合计:%6d.000000\t----------------------|\n",total);
printf("按回车返回");
getchar();
getchar();
}


/*列表函数*/
void  list(link l)
{
int i=0;
link curr=l;
int total=0;
if(l->data.xf->year==0)
{
printf("空表!\n");
getchar();
getchar();
return;
}
printf("*******************************您的消费记录信息********************************\n");
printf("|-----------------------------------------------------------------------------|\n");
while(curr!=NULL)
{
total=0;
printf("|学号:%-18s姓名:%-11s 性别:",curr->data.no,curr->data.name);
if(curr->data.sex=="f")printf("女   ");
else printf("男   ");
printf("电话:%-20s|\n",curr->data.tel);
printf("|-----------------------------------------------------------------------------|\n");
for(i=0;curr->data.xf[i].year!=0&&i<20;i++)
{
printf("|日期:%d-%d -%-5d      消费项目名称:%-16s金额:%-8d\t      |\n",curr->data.xf[i].year,curr->data.xf[i].month,curr->data.xf[i].day,curr->data.xf[i].xfproject,curr->data.xf[i].money);
total=total+(curr->data.xf[i].money);
}
printf("|-----------------------------合计:%6d.000000\t----------------------|\n",total);
curr=curr->next;
}
printf("|-----------------------------------------------------------------------------|\n");
getchar();
getchar();
}


/*保存函数*/
void  save(link l)
{
link curr=l;
int i=0;
FILE *p=fopen("D:\\save.txt","w");
if(!p)
{
printf("打开文件失败!\n");
getchar();
getchar();
}
if(curr->data.xf->year==0)
{
printf("空表!");
getchar();
getchar();
return;
}
while(curr!=NULL)
{
fprintf(p,"%s\n%s\n%s\n%s\n",curr->data.no,curr->data.name,curr->data.sex,curr->data.tel);
i=0;
while(i!=20&&curr->data.xf[i].year!=0)
{
fprintf(p,"%d\n%d\n%d\n%s\n%d\n",curr->data.xf[i].year,curr->data.xf[i].month,curr->data.xf[i].day,curr->data.xf[i].xfproject,curr->data.xf[i].money);
i++;
}
if(i!=20)fprintf(p,"%d\n",-1);
curr=curr->next;
}
fprintf(p,"%s\n","*");
fclose(p);
printf("保存文件完毕!");
printf("按回车返回");
getchar();
getchar();
}


/*读取函数*/
void   load(link l)
{
int i=0;
link curr=l;
link temp;
FILE *p1=fopen("D:\\save.txt","r");
if(!p1)
{
printf("没有找到该文件.\n");
getchar();
getchar();
return;
}
while(1)
{
i=0;
fscanf(p1,"%s",curr->data.no);
if(strcmp(curr->data.no,"*")==0)
{
temp=curr;
curr=l;
while(curr->next!=temp)
{
curr=curr->next;
}
temp=curr->next;
free(temp);
curr->next=NULL;
curr=NULL;
printf("读取文件完毕!\n");
fclose(p1);
printf("按回车返回");
getchar();
getchar();
return;
}
fscanf(p1,"%s",curr->data.name);
fscanf(p1,"%s",curr->data.sex);
fscanf(p1,"%s",curr->data.tel);
while(i!=20)
{
fscanf(p1,"%d",&(curr->data.xf[i].year));
if(curr->data.xf[i].year==-1)
{
curr->data.xf[i].year=0;
break;
}
fscanf(p1,"%d",&(curr->data.xf[i].month));
fscanf(p1,"%d",&(curr->data.xf[i].day));
fscanf(p1,"%s",curr->data.xf[i].xfproject);
fscanf(p1,"%d",&(curr->data.xf[i].money));
i++;
}
curr->next=(Node*)malloc(sizeof(Node));
curr=curr->next;
}
printf("按回车返回");
getchar();
getchar();
}


/*统计函数ok*/
void   count(link l)
{
int i,c=0,tyear,tmonth;
link curr=l;
int total=0;
printf("请输入需要统计消费的年份:");
scanf("%d",&tyear);
printf("请输入需要统计消费的月份:");
scanf("%d",&tmonth);
while(curr!=NULL)
{
for(i=0;curr->data.xf[i].year!=0&&i<20;i++)
{
if(curr->data.xf[i].year==tyear&&curr->data.xf[i].month==tmonth)
{
total=total+(curr->data.xf[i].money);
}
}
   printf("%d年%d月所有学生一共消费了%d元",tyear,tmonth,total);
curr=curr->next;
}
printf("按回车返回");
getchar();
getchar();
}


/*添加函数ok*/
void add(link l)
{
int i=0;
link curr=l;
int c=0;
if(l->data.xf->year==0)
{
printf("空信息库请选用功能1或3进行信息录入\n");
return;
}
while(curr->next!=NULL)
{
curr=curr->next;
}
curr->next=(Node*)malloc(sizeof(Node));
curr=curr->next;
curr->next=NULL;
printf("请输入学号:");
scanf("%s",curr->data.no);
printf("请输入姓名:");
scanf("%s",curr->data.name);
printf("请输入性别(f/m):");
scanf("%s",curr->data.sex);
while(*(curr->data.sex)!='f'&&*(curr->data.sex)!='m')
{
printf("输入错误,请输入f代表女性,m代表男性:");
scanf("%s",curr->data.sex);
}
printf("请输入电话号码:");
scanf("%s",curr->data.tel);
printf("请输入您的消费记录,每笔消费记录中当年份输入0时退出!\n");
while(i<20)
{
printf("第%d笔:  年份:",i+1);
scanf("%d",&(curr->data.xf[i].year));
if(curr->data.xf[i].year==0)break;
printf("月份:");
scanf("%d",&(curr->data.xf[i].month));
printf("日:");
scanf("%d",&(curr->data.xf[i].day));
printf("消费项目名称:");
scanf("%s",curr->data.xf[i].xfproject);
printf("消费金额(必须为整数):");
scanf("%d",&(curr->data.xf[i].money));
i++;
}
printf("添加信息完毕\n");
curr=l;
while(curr!=NULL)
{
c++;
curr=curr->next;
}
printf("添加后总共有%d名学生.\n",c);
printf("按回车返回");
getchar();
getchar();
}


void others(link l)
{
int i,j;
system("cls");
printf("\n\n\n\t\t\t\t大班早日脱单!\n");
  
printf("\n\t\t\t     ******       ******\n");
printf("\t\t\t   **********   **********\n");
printf("\t\t\t ************* *************\n");
  
for(i=0;i<3;i++)
{
printf("\t\t\t");
for(j=0;j<29;j++)
printf("*");
printf("\n");
}
  
for(i=0;i<7;i++)
{
printf("\t\t\t");
for(j=0;j<2*(i+1)-1;j++)
printf(" ");
for(j=0;j<27-i*4;j++)
printf("*");
printf("\n");
}
  
for(i=0;i<14;i++)
printf(" ");
printf("\t\t\t      *\n");
getchar();
getchar();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值