学生消费记录管理系统(C语言 结构体, 链表)
自己在寒假練手的小項目?
本系統要實現的功能:
1.???? 消費記錄存在文件fee.txt中, 每一條記錄包括一個消費的交易日期、入賬日期、交易額、交易后余額
2.???? (1)用戶能夠查詢自己的一卡通固定時段消費情況:可以按月、學期、學年查詢?????(2)用戶可以自定義一個時間段進行查詢自己的消費情況
(3)用戶可以按交易金額查找消費記錄
(4)管理員可查詢任一用戶的消費記錄,可按照固定時段、自定義時段、金額方式、已刪除記錄查詢
3. 排序功能:按消費記錄的交易日期、金額、次數中一個進行(升序或降序)排序。
4. 數據錄入:管理員能錄入某個用戶的一卡通消費情況,可以一次完成若干條記錄的輸入。
5. 顯示功能:可進行全部消費記錄的顯示,也可按照查詢結果進行顯示
6. 數據變更:管理員可以更改或刪除用戶的某條消費記錄,但刪除的信息要保存在另外一個文件fee_undel.dat
7.統計功能:(1)用戶可統計自己在一個自定義時間段里的消費總金額情況
????? ??????(2)管理員可統計各個用戶在一個自定義時間段里的消費總金額情況
8. 用戶和管理員的權限要分開。
代碼:
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct Student)?
int n=0; //用來判斷是否有數據輸出的?
struct Student?
 {
 long ID; //學號?
 char name[20]; //姓名?
 int year; //交易日期:年?
 int month; //交易日期:月?
 int day;//交易日期:天?
 long postingDate; //入賬日期?
 int amount; //交易金額?
 int moneyLeft;//交易余額?
 ? ? struct Student *next;//創建鏈表的節點?
 };
//學生信息從 fee.txt 文件中讀取 
struct Student *creat(void)? //定義函數 此函數返回一個指向鏈表頭的指針? 建立動態鏈表?
{
 FILE *fp;
 if((fp = fopen("fee.txt","rb"))== NULL)?
 ?  {
 ?  printf("無法打開此文件\n");
 ?  return ;
 }
 ? else printf("打開文件成功\n");
 struct Student *head;
 struct Student *p1,*p2;
 head=p1=p2=(struct Student *)malloc(LEN);? //開辟一個新單元??
 
while((fscanf(fp,"%ld %s %d %d %d %ld %d %d",&p1->ID,p1->name,&p1->year,&p1->month,&p1->day,&p1->postingDate,&p1->amount,&p1->moneyLeft))!=EOF)? //當文件未讀取完
 {
 p1=(struct Student*)malloc(LEN);
? ? ? ? p2->next=p1;
 p2=p1;
 
 
 }?
// printf("文件錄入成功\n");?
 ?
 p2->next=NULL;
 
 
 if (head == NULL)
? ? ? {
? ? ? ? printf("讀取失敗!內存空間申請不足!\n");
? ? ? ? return NULL;
? ? ? ?}
? ? ? ?
? ? fclose( fp ); //最后不要忘了關閉文件?
? ? ? ?
? ? return(head);
 
}
/*************************************************
? ?Function :已刪除記錄查詢?
*************************************************/
struct Student *recreat(void)? //定義函數 此函數返回一個指向鏈表頭的指針? 建立動態鏈表?
{
 FILE *fp;
 if((fp = fopen("fee_undel.dat","rb"))== NULL)?
 ?  {
 ?  printf("無法打開此文件\n");
 ?  return ;
}
? ? ? else printf("打開文件成功\n");
struct Student *head;struct Student *p1,*p2;
head=p1=p2=(struct Student *)malloc(LEN);? //開辟一個新單元??
while((fscanf(fp,"%ld %s %d %d %d %ld %d %d ",&p1->ID,p1->name,&p1->year,&p1->month,&p1->day,&p1->postingDate,&p1->amount,&p1->moneyLeft))!=EOF)? //當文件未讀取完
{
p1=(struct Student*)malloc(LEN);
? ? ? ? ? ? ? ? p2->next=p1;
p2=p1;
}?
printf("文件錄入成功\n");?
?
p2->next=NULL;
if (head == NULL)
? ? ? {
? ? ? ? printf("讀取失敗!內存空間申請不足!\n");
? ? ? ? return NULL;
? ? ? ?}
? ? ? ?
? ? fclose( fp ); //最后不要忘了關閉文件?
? ? ? ?
? ? return(head);
}
/***********************************************
? ? Function : 查詢?
************************************************/?
void check(int b) //通過用戶輸入的內容,鏈表查詢?
{
long num;
system("cls");
printf(" 請輸入您的學號\n");
scanf("%ld",&num);
struct Student *pt;
pt=creat();
if(b==1)? //按月份查詢?
{
int c;
? ?????printf(" 請輸入您想要查詢的月份\n");
scanf("%d",&c);
while(pt!=NULL)
{
? if(pt->ID==num)
? {
? if((pt->month)==c)
? {
? n=1;
printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",pt->ID,pt->name,pt->year,pt->month,pt->day,pt->amount,pt->moneyLeft);
? }
?
? }
pt=pt->next;
}
}
else if(b==2) //按學期查詢?
{
int d,y1,y2,m1,m2,ji;
printf("? 請輸入您的級數,比如:2017\n");
scanf("%d",&ji);
getchar();?
printf("請選擇您要查詢的學期 1——大一上,2——大一下,3——大二上,4——大二下,5——大二下,6——大三上,7——大三下\n\n8——大四上,9——大四下\n");
scanf("%d",&d);
switch (d)?
{
case 1: y1=ji; y2=(ji+1); m1=9; m2=2;break;
case 2: y1=(ji+1); y2=(ji+1); m1=3; m2=8;break;
case 3: y1=(ji+1); y2=(ji+2); m1=9; m2=2;break;
case 4: y1=(ji+2); y2=(ji+2); m1=3; m2=8;break;
case 5: y1=(ji+2); y2=(ji+3); m1=9; m2=2;break;
case 6: y1=(ji+3); y2=(ji+3); m1=3; m2=8;break;
case 7: y1=(ji+3); y2=(ji+4); m1=9; m2=2;break;
case 8: y1=(ji+4); y2=(ji+4); m1=3; m2=8;break;
default: printf("data error");
}
while(pt!=NULL)
{
? ?if(pt->ID==num)
? ?{
? ? ? if(((y1==(pt->year))&&m1<=(pt->month)<=12)||((y2==(pt->year))&&(1<=(pt->month)<=m2)))
? ? ? {
? ? ? n=1;
? ? ?printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",pt->ID,pt->name,pt->year,pt->month,pt->day,pt->amount,pt->moneyLeft);
? ? ? ? ?}
? ? ?}
? pt=pt->next;
? ? }?
? ? }
? ? else if(b==3) //按學年查詢
{
int ji2,f,y;
printf("? 請輸入您的級數,比如:2017");
scanf("%d",&ji2);
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 請選擇您要查詢的學年: 1——大一,2——大二,3——大三,4——大四\n\n\n");?
scanf("%d",&f);
switch (f)
{
case 1: y=ji2;break;
case 2: y=ji2+1;break;
case 3: y=ji2+2;break;
case 4: y=ji2+3;break;
default: printf("data error");
}
while(pt!=NULL)
{
if(pt->ID==num)
{
? if((((pt->year)==y)&&(9<=(pt->month)<=12))||(((pt->year)==(++y))&&(1<=(pt->month)<=8)))
? {
? ? n=1;
? ? printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",pt->ID,pt->name,pt->year,pt->month,pt->day,pt->amount,pt->moneyLeft,);
? ? ? ?}
}
? ? pt=pt->next;
}
?
}?
else if(b==4)? //按日期段查詢?
{
int y3,y4,m3,m4;
printf(" 請輸入您想選擇的時間段 例如:2017, 1, 2017, 8\n\n\n");
scanf("%d, %d, %d ,%d\n",&y3,&y4,&m3,&m4);
while(pt!=NULL)
{
if(pt->ID==num)
{
? ?if((((pt->year)==y3)&&(m3<=(pt->month)<=12))||(((pt->year)==(y4))&&(1<=(pt->month)<=m4)))?
? ?{
? ? ?n=1;
? ? ? ? printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",pt->ID,pt->name,pt->year,pt->month,pt->day,pt->amount,pt->moneyLeft);
? ? ? ? }??
}
pt=pt->next;
}
?
}
else if(b==5) //按交易金額查詢?
{
int g;
? ? printf("? ?輸入您想要查詢的金額\n\n\n");
????scanf("%d",&g);
while(pt!=NULL)
{
if(pt->ID==num)
{
? if((pt->amount)==g)
? {
? n=1;
printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",pt->ID,pt->name,pt->year,pt->month,pt->day,pt->amount,pt->moneyLeft);
? ? ? }
else printf("data error\n");
? ?}?
pt=pt->next;
}
}
else if(b==6) //顯示全部消費記錄?
{
? ?while(pt!=NULL)
? ?{
? ? ? if(pt->ID==num)
? ? ? {
? ? ? n=1;
? ? ? ? printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",pt->ID,pt->name,pt->year,pt->month,pt->day,pt->amount,pt->moneyLeft);
? ? ? }
? ? ? ?pt=pt->next;
? ? }
}?
else if(b==7) //已刪除記錄查詢?
{
struct Student *p1;
p1=recreat();
while(p1!=NULL)
? ?{
? ? ? if(p1->ID==num)
? ? ? {
? ? ? n=1;
? ? ? ? printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",p1->ID,p1->name,p1->year,p1->month,p1->day,p1->amount,p1->moneyLeft);
? ? ? }
? ? ? ?p1=p1->next;
? ? }
}
if(n==0)
{
printf("沒有相關交易記錄");?
}
//選擇一個后,返回主函數?
}
int inquire(int b) //選擇要查詢的內容?
{
int a;
system("cls");
if(b==1)
{
printf("***請選擇您想要的功能***\n\n");
printf("1-----按月查詢? 2-----按學期查詢? 3-----按學年查詢? ? 4-----按日期區間段查詢 5-----按交易金額查詢 6-----顯示全部消費記錄\n\n 7-----已刪除消息記錄查詢\n\n\n");
scanf("%d",&a);
switch (a)
{
case 1:check(1); break;
case 2:check(2); break;
case 3:check(3); break;
case 4:check(4); break;
case 5:check(5); break;
case 6:check(6); break;
case 7:check(7); break;
default: printf("data error");
}
}
else
{
? ? printf(" \n\n\n\n\n\n\t\t\t? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?***請選擇您想要的功能***\n\n");
printf("1-----按月查詢? 2-----按學期查詢? 3-----按學年查詢? ? 4-----按日期區間段查詢 5-----按交易金額查詢 6-----顯示全部消費記錄\n\n\n");
scanf("%d",&a);
switch (a)
{
case 1:check(1); break;
case 2:check(2); break;
case 3:check(3); break;
case 4:check(4); break;
case 5:check(5); break;
case 6:check(6); break;
default: printf("data error");
}
? ?}
? ?
? ?
}
/******************************************************
? ? ? ? ?Function : 排序?
********************************************************/?
void Rank_check(int b)
{
? ? long num;
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?請輸入您的學號\n\n\n");
scanf("%ld",&num);
int xu;
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 請選擇升序或降序:0——升序,1——降序\n");
scanf("%d",&xu);?
struct Student *pt;
pt=creat(); //頭指針?
struct Student *p1,*p2,temp,*p;
if(b==1)? //按金額排序
{?
? ?if(xu==0)? //升序?
? ?{
? ?
? ? ? for(p1=pt ;p1!=NULL ;p1=p1->next)??
? ? ? ? ?for(p2=p1->next ;p2!=NULL ;p2=p2->next)
? ? ? ? ?{
? ? ? ? ? if (p1->amount > p2->amount)
? ? ? ? ? {
? ? ? ? ? temp = *p1;
? ? ? ? ? ? ? *p1=*p2;
? ? ? ? ? ? ? *p2=temp;
? ? ? ? ? ? ? //重構鏈表?
? ? ? ? ? ? ? p = p1->next;? ?
? ? ? ? ? ? ? ? p1->next = p2->next;??
? ? ? ? ? ? ? ? p2->next = p;??
}
? ? ? ? ? }
? ? ? ? }
? ? ? ? else if(xu==1) //降序
{
for(p1=pt ;p1!=NULL ;p1=p1->next)??
? ? ? ? ?for(p2=p1->next ;p2!=NULL ;p2=p2->next)
? ? ? ? ?{
? ? ? ? ? if (p1->amount < p2->amount)
? ? ? ? ? {
? ? ? ? ? temp = *p1;
? ? ? ? ? ? ? *p1=*p2;
? ? ? ? ? ? ? *p2=temp;
? ? ? ? ? ? ? //重構鏈表?
? ? ? ? ? ? ? p = p1->next;? ?
? ? ? ? ? ? ? ? p1->next = p2->next;??
? ? ? ? ? ? ? ? p2->next = p;??
}
? ? ? ? ? }
}?
?
while(pt!=NULL)
? ?{
? ? ? if(pt->ID==num)
? ? ? {
? ? ? n=1;
? ? ? ? printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",pt->ID,pt->name,pt->year,pt->month,pt->day,pt->amount,pt->moneyLeft,);
? ? ? }
? ? ? ?pt=pt->next;
? ? }
? ? }
? ? else if(b==2)
? ? {
? ? if(xu==0)? //升序?
? ?{
? ?
? ? ? for(p1=pt ;p1!=NULL ;p1=p1->next)? ?
? ? ? ? ?for(p2=p1->next ;p2!=NULL ;p2=p2->next)
? ? ? ? ?{
? ? ? ? ? if (p1->tradeTimes > p2->tradeTimes)
? ? ? ? ? {
? ? ? ? ? temp = *p1;
? ? ? ? ? ? ? *p1=*p2;
? ? ? ? ? ? ? *p2=temp;
? ? ? ? ? ? ? //重構鏈表?
? ? ? ? ? ? ? p = p1->next;? ?
? ? ? ? ? ? ? ? p1->next = p2->next;??
? ? ? ? ? ? ? ? p2->next = p;??
}
? ? ? ? ? }
? ? ? ? }
? ? ? ? else if(xu==1) //降序
{
for(p1=pt ;p1!=NULL ;p1=p1->next)? ?
? ? ? ? ?for(p2=p1->next ;p2!=NULL ;p2=p2->next)
? ? ? ? ?{
? ? ? ? ? if (p1->tradeTimes < p2->tradeTimes)
? ? ? ? ? {
? ? ? ? ? temp = *p1;
? ? ? ? ? ? ? *p1=*p2;
? ? ? ? ? ? ? *p2=temp;
? ? ? ? ? ? ? //重構鏈表?
? ? ? ? ? ? ? p = p1->next;? ?
? ? ? ? ? ? ? ? p1->next = p2->next;??
? ? ? ? ? ? ? ? p2->next = p;??
}
? ? ? ? ? }
}?
?
while(pt!=NULL)
? ?{
? ? ? if(pt->ID==num)
? ? ? {
? ? ? n=1;
? ? ? ? printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",pt->ID,pt->name,pt->year,pt->month,pt->day,pt->amount,pt->moneyLeft);
? ? ? }
? ? ? ?pt=pt->next;
? ? }
}
else if(b==3)? //按交易日期?
{
if(xu==0)? //升序?
? ?{
? ?
? ? ? for(p1=pt ;p1!=NULL ;p1=p1->next)? ?
? ? ? ? ?for(p2=p1->next ;p2!=NULL ;p2=p2->next)
? ? ? ? ?{
? ? ? ? ? if (p1->postingDate > p2->postingDate)
? ? ? ? ? {
? ? ? ? ? temp = *p1;
? ? ? ? ? ? ? *p1=*p2;
? ? ? ? ? ? ? *p2=temp;
? ? ? ? ? ? ? //重構鏈表?
? ? ? ? ? ? ? p = p1->next;? ?
? ? ? ? ? ? ? ? p1->next = p2->next;??
? ? ? ? ? ? ? ? p2->next = p;??
}
? ? ? ? ? }
? ? ? ? }
? ? ? ? else if(xu==1) //降序
{
for(p1=pt ;p1!=NULL ;p1=p1->next)??
? ? ? ? ?for(p2=p1->next ;p2!=NULL ;p2=p2->next)
? ? ? ? ?{
? ? ? ? ? if (p1->postingDate < p2->postingDate)
? ? ? ? ? {
? ? ? ? ? temp = *p1;
? ? ? ? ? ? ? *p1=*p2;
? ? ? ? ? ? ? *p2=temp;
? ? ? ? ? ? ? //重構鏈表?
? ? ? ? ? ? ? p = p1->next;? ?
? ? ? ? ? ? ? ? p1->next = p2->next;??
? ? ? ? ? ? ? ? p2->next = p;??
}
? ? ? ? ? }
}?
?
while(pt!=NULL)
? ?{
? ? ? if(pt->ID==num)
? ? ? {
? ? ? n=1;
? ? ? ? printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",pt->ID,pt->name,pt->year,pt->month,pt->day,pt->amount,pt->moneyLeft);
? ? ? }
? ? ? ?pt=pt->next;
? ? }
}
if(n==0)
{
printf("data error");
}?
}
/************************************
? ?Function : 排序菜單?
************************************/
void rank()? //排序功能?
{
? ?int a;
? ?system("cls");
? ?printf(" \n\n\n\n\n\n\t\t\t? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?***請選擇您想要的功能***\n\n");
? ?printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1-----按金額 2-----按交易次數? 3-----按交易日期\n\n\n");
? scanf("%a",&a);
? ?switch (a)
? ?{
? ? case 1: Rank_check(1);break;
? ? case 2: Rank_check(2);break;
? ? case 3: Rank_check(3);break;
? ? default: printf("data error");
?
? ?}
}
/***********************************************************
? Funtion : 統計?
************************************************************/
void tongji()
{
long num;
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 請輸入您的學號\n\n\n");
scanf("%ld",&num);
struct Student *pt;
pt=creat();
int y1,y2,m1,m2,total=0;?
? ? printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 請輸入您想選擇的時間段 例如:2017, 1, 2017, 8\n\n\n");
? ? scanf("%d %d %d %d",&y1,&y2,&m1,&m2);
? ? getchar();
while(pt!=NULL)
{
if(pt->ID==num)
{
? ? ? ?if((((pt->year)==y1)&&(m1<=(pt->month)<=12))||(((pt->year)==(y2))&&(1<=(pt->month)<=m2)))?
? ?{
? ? n=1;
? ? ?total = total + pt->amount;
? ? ? }
? ? }
pt=pt->next;
}
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 該時間段交易的總金額為:%d\n\n\n",total);
if(n==0)
{
printf("沒有相關交易記錄\n");
}?
}
/**************************************
? ? ?Function : 錄入學生消費信息?
***************************************/
int input()? //錄入學生信息,要開辟新的空間?
{
FILE *fp;//文件指針?
if((fp=fopen("fee.txt","ab"))==NULL)
{
printf("can not open file\n");
return ;
}
struct Student *pt,*p1; //pt指向最后一個學生?
pt=creat();
while (pt->next!=NULL)
{
? ? ? ? pt=pt->next;
? ? }
while(1)
{
?
p1=(struct Student*)malloc(LEN);
system("cls");
? ? printf(" \n\n\n\n\n\n\t\t\t? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\n\n");
? ??
printf(" 請輸入: 學號 ,? 姓名 , 交易日期:年 月 日 , 入賬日期, 交易金額 , 余額 \n");
printf(" 示例: 1234567890 , 喜羊羊 ,2018? 02 24 , 20180224, 2 , 20 \n");
scanf("%ld %s %d %d %d %ld %d %d ",&p1->ID,p1->name,&p1->year,&p1->month,&p1->day,&p1->postingDate,&p1->amount,&p1->moneyLeft);
printf("\n");
fprintf(fp,"%ld %s %d %d %d %ld %d %d \n ",p1->ID,p1->name,p1->year,p1->month,p1->day,p1->postingDate,p1->amount,p1->moneyLeft);
p1->next=NULL;
pt->next=p1;
getchar();
printf("是否要繼續錄入 Y/N");
if(getchar()=='N')
? ? break;
? ? }
fclose(fp);
printf("錄入結束");?
return 0;
}
/****************************************************
? ? Function : 修改學生消費信息?
*****************************************************/
void modify()
{
int a,num;
char ch;
? ? struct Student *temp;
temp=creat();
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?請輸入您要查找的學號\n\n\n");
? ? scanf("%ld",&num);
? ? getchar();
? ? while(temp->next!=NULL)
{? ?
if((temp->ID)==num)
{
? ?printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",temp->ID,temp->name,temp->year,temp->month,temp->day,temp->amount,temp->moneyLeft);
? ?printf("是否要修改該信息 Y/N\n");
? ?
? ?if(getchar()=='Y')
? ? ? ?{
? ? ? ? getchar();
? ? ? ? printf("請選擇您想要修改的信息: 1--學號,2--姓名,3--交易日期:年,月,日。4--入賬日期 示例20170101,5--交易金額,6--交易余額\n");
scanf("%d",&a);
getchar();
switch(a)
{
? ?case 1: printf("請輸入您要修改的學號:\n");scanf("%ld",&temp->ID); break;
? ?case 2: printf("請輸入修改學生的姓名:\n");scanf("%s",temp->name); break;
? ?case 3: printf("請輸入修改交易日期: 示例:2018 2 23\n"); scanf("%d %d %d",&temp->year,&temp->month,&temp->day); break;
? ?case 4: printf("請輸入修改入賬日期:\n"); scanf("%ld",&temp->postingDate); break;
? ?case 5: printf("請輸入修改交易金額:\n"); scanf("%d",&temp->amount); break;
? ?case 6: printf("請輸入修改交易余額:\n"); scanf("%d",&temp->moneyLeft); break;
? ?default: printf("data error\n");
}
printf("修改完成\n"); ? ?
printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",temp->ID,temp->name,temp->year,temp->month,temp->day,temp->amount,temp->moneyLeft);
? ? ? ? ? ? }
}
printf("是否要繼續修改 Y/N\n");
if(getchar()=='N')
return ;
? ? temp=temp->next;
}
}
/*******************************************
? ? ? Function : 刪除學生消費記錄?
*********************************************/?
struct Student? *delete()
{
??
long num;
struct Student *head,*temp,*p,*q;??
head=creat();
temp = head;
FILE *fp,*fp2,*fp3;//文件指針?
if((fp=fopen("fee_undel.dat","wb"))==NULL)
{
printf("can not open file\n");
return ;
}
if((fp2=fopen("fee.txt","wb"))==NULL)??
{
printf("can not open file\n");
return ;
}
fclose(fp2);
if((fp3=fopen("fee.txt","ab"))==NULL)??
{
printf("can not open file\n");
return ;
}
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 請輸入您要查找的學號\n\n\n");
? ? getchar();
while(temp->next!=NULL)
{? ?
? ?int flag=0;
? ? p=temp;
? ? q=temp;
if((temp->ID)==num)
{
? ?printf("學號:%10ld 姓名:%5s 交易日期:%d %d %d 交易金額:%d 交易余額%d \n",temp->ID,temp->name,temp->year,temp->month,temp->day,temp->amount,temp->moneyLeft);
? ?printf("是否要刪除該信息 Y/N\n");
? ?
? ?if(getchar()=='Y')
? ? ? ?{
? flag=1;
? if(temp==head) /* 表頭節點*/?
? {
? ? ?head=head->next;
? ? ?free(temp); /*釋放被刪節點*/
}
else? //將刪除的節點信息保存到 fee_undel.dat中?
{
p->next=temp->next; //表中節點
fprintf(fp,"%ld %s %d %d %d %ld %d %d\n ",temp->ID,temp->name,temp->year,temp->month,temp->day,temp->postingDate,temp->amount,temp->moneyLeft,);
free(temp);
}
? ? ? ? ? ? }
getchar();??
}
? ? if(flag==0)
? ? {
? ? fprintf(fp3,"\n%ld %s %d %d %d %ld %d %d \n",temp->ID,temp->name,temp->year,temp->month,temp->day,temp->postingDate,temp->amount,temp->moneyLeft); //以追加方式寫入
}
? ? temp=temp->next;
}
??
fclose(fp);
fclose(fp3);
return (head);
}
/*******************************
? ?Function : 更新菜單?
*******************************/
void renew()
{
int a;
system("cls");
printf(" \n\n\n\n\n\n\t\t\t? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?***請選擇您想要的功能***\n\n");
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ******************************************************************\n\n\n");
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 請選擇 1——修改信息,2——刪除信息\n\n\n");
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ******************************************************************\n\n\n");
scanf("%d",&a);
switch(a)
{
case 1:modify(); break;
case 2:delete();? break;
default:printf("data error\n");
}
}
int user() //用戶權限,選擇功能?
{
system("cls");
int a;
printf("\n\n\n\n\n\n\t\t\t? ? ? ? ? ? ? ? ? ? ? ? ? ?***請選擇您想要的功能***\n\n");
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ******************************************************************\n\n\n");
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1------查詢? 2------排序? ?3------統計? \n\n\n");
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ******************************************************************\n\n\n");
scanf("%d",&a);
switch(a)
{
case 1: inquire(0); break;
case 2: rank();? break;
case 3: tongji(); break;
// default: printf("data error");
}
return 0;
}
int manager() //管理員權限,選擇功能
{
system("cls");
int a;
printf(" \n\n\n\n\n\n\t\t\t? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?***請選擇您想要的功能***\n\n");
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ******************************************************************\n\n\n");
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1------查詢? 2------排序? ?3------統計? 4-----錄入? ?5-----更新\n\n\n");
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ******************************************************************\n\n\n");
scanf("%d",&a);
switch(a)
{
case 1: inquire(1); break;
case 2: rank();? break;
case 3: tongji(); break;
case 4: input(); break;
case 5: renew(); break;
default: printf("data error");
}
return 0;
?}?
void welcome()? //歡迎頁面?
{
int a;
printf("? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?******選擇您的身份:輸入1——用戶,輸入2——管理員******\n");
scanf("%d",&a) ;
switch (a)
{
case 1: user(); break;
case 2: manager(); break;
default : printf("data error"); break;
}
}
int main()
{
? ?welcome();
? ? return 0;
}
? ??
總結
以上是生活随笔為你收集整理的学生消费记录管理系统(C语言 结构体, 链表)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 如何判断两条线段是否相交
- 下一篇: 2013 NMPD展示预览,第1部分
