程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言問答 >> 雜志訂閱管理的c語言

雜志訂閱管理的c語言

編輯:C語言問答

雜志訂閱管理的c語言

110 C語言課程設計——雜志訂閱管理系統
懸賞分:20 - 提問時間2008-9-21 18:44 問題為何被關閉
使用計算機對雜志進行管理,該雜志最多擁有訂戶不超過10人,每個訂戶的信息包括:姓名,性別,電話號碼,雜志單位,訂閱數,訂閱期限(某年某月)

要求有以下功能:
(1)增加新訂戶,即將新訂戶的全部信息輸入到文件中
(2)根據當天的日期對新訂戶全部信息進行查詢,刪除已到期的訂戶記錄
(3)統計本期雜志訂戶數並打印運算結果

本期訂信息
訂戶名 訂閱數 單價 全額
李平 2 5.5 11.0
黃海 1 5.5 5.5
合計 3 1.0 16.5
[提示]
需求分析,訂戶的信息用文件存儲,提供文件的輸入和輸出操作;提供文件的添加操作增加新訂戶;對文件的查詢,提供文件的查找操作;通過文件的刪除操作 刪除已到期的訂戶記錄;提供文件的查找操作統計本期雜志訂戶數目並打印運算結果;另外還要提供鍵盤式選擇菜單以實現功能選擇。 補充:

知道答案的同志可以發到[email protected]

 

最佳回答:

#include<stdio.h>
#include "string.h"
#include "stdlib.h"
#include "conio.h"
#define max 20
struct magazine
{
char  name[11];
char  sex[6];
char  addr[11];
char  phone_number[12];
char  unit_price[5];
char  amount[4];
char  time_limit[11];
}
order[max];

void save(int n);
int load_record();
void search();
void printf_n(int n);
void printf_one(int i);
void input(int i);
void statistic();
void add();
void menu();

void main()
{
FILE *fp;
fp=fopen("record.txt","w");/*在C:\Documents and Settings\Administrator裡建立一個"record.txt"記事本*/
fclose(fp);
menu();
}

void menu()
{
// void clrscr();
int w,n;
do
{
//clrscr();
printf("\n");
printf("\t\t* * * * * * * * * * * * * * * * * * * * * *  * * *\n");
printf("\t\t                                                  \n");
printf("\t\t                                                  \n");
printf("\t\t              歡迎來到雜志訂閱系統!               \n");
printf("\t\t                                                  \n");
printf("\t\t                                                  \n");
printf("\t\t* * * * * * * * * * * * * * * * * * * * * *  * * *\n");
printf("\n\n\t\t  *********************************************\n\n");
printf("\t\t              1:add_new_subscriber\n");
printf("\t\t              2:browse\n");
printf("\t\t              3:statistic\n");
printf("\t\t              4:exit\n\n");
printf("\t\t  *********************************************\n\n");
printf("  Choice your number(1-4):[ ]\b\b");
scanf("%d",&n);
if(n<1||n>4) w=1;
else w=0;
}
while (w==1);
/***************選擇功能****************/
switch(n)
   {
    case 1:add();break;          /*增加新訂戶記錄*/
    case 2:search();break;       /*查找過期的訂戶記錄並刪除*/
    case 3:statistic();break;    /*統計*/
    case 4:break;         /*退出*/
   }
}
/*********************添加模塊************************/
void add()
{
int t,i,m;
system("cls");
t=load_record();
printf("您需要添加多少用戶的信息?\n");
printf("輸入號碼:[  ]\b\b\b");
scanf("%d",&m);
for(i=0;i<m;i++)
{
printf("\n輸入 %dth subscriber record.\n",i+1);
input(t+i);                  /*調用輸入函數*/
}
save(t+m);                   /*調用保存函數 保存t+m組數據*/
system("cls")  ;                /*******清屏*********/
menu();                      /*返回登陸界面*/
}
void input(int i)
{
printf("請輸入:\n姓名 性別 地址 電話 雜志單價 數量 訂閱期限\n");
scanf("%s%s%s%s%s%s%s",&order[i].name,&order[i].sex,&order[i].addr,&order[i].phone_number,&order[i].unit_price,&order[i].amount,&order[i].time_limit);
}
/**************************統計模塊****************************/
void statistic()
{
int t;
t=load_record();
printf("訂閱者的數量[%d]\b\b\b",t);
printf_n(t);
printf("\n\n\n按任意鍵返回...\n\n");
getch();
menu();
}

void printf_one(int i)    /*顯示一個儀器記錄的函數*/
{
printf("%-10s  %-5s  %-10s  %-11s    %-4s   %-3s      %-10s\n\n",order[i].name,order[i].sex,order[i].addr,order[i].phone_number,order[i].unit_price,order[i].amount,&order[i].time_limit);
}

void printf_n(int n)      /*顯示n個儀器記錄的函數*/
{
int j;
system("cls");                /**********清屏************/
printf("姓名  性別  地址  電話號碼   價格  數量  時間期限\n\n");
for(j=0;j<n;j++)
 {
  if((j+1)%10==0)         /*控制顯示,每屏顯示10行*/
   {
   printf("\n\n按任意鍵繼續 ...");
   getch();
   puts("\n\n");
   }
printf_one(j);            /*調用顯示一個儀器記錄的函數*/
 }
}
/***************查詢模塊****************/
void search()
{
FILE *fp;
char date[11],str[2];
int t,i,sum=0;
t=load_record();
system("cls");
printf("請輸入日期:[          ]\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",date);
printf("\n");
if((fp=fopen("record.txt","w"))==NULL)/*以只寫方式打開*/
      {
       printf("\n無法打開文件\n");
       exit(0);
      }
system("cls");
printf("\n");
   for(i=0;i<t;i++)
     {
       if(strcmp(order[i].time_limit,date)<0)
       {
          sum++;
        
          printf("\n");
          printf_one(i);          /**********把符合條件的記錄顯示出來*********/
          printf("\n\n記錄已過期!");
          printf("\n\n你想要刪除此條信息嗎?('Y'or'N'):[ ]\b\b");
          scanf("%s",str);;
        if(strcmp(str,"Y")==0||strcmp(str,"y")==0)
        continue;
       }
fwrite(&order[i],sizeof(struct magazine),1,fp);
      }
fclose(fp);
     if(sum==0)
     {
     printf("***************************************************\n\n");
     printf("很遺憾! 無法找到您想要的條件\n\n");
     printf("***************************************************\n\n");
     }
     printf("\n\n\n按任意鍵返回前一步...\n");
     getch();
     menu();
}

/****************************公共函數************************************/
int load_record()/***加載儀器信息並計算記錄儀器個數的函數***/
{
FILE *fp;
int i;
   if((fp=fopen("record.txt","r"))==NULL)/*以只讀方式打開*/
     {
      printf("\n無法打開文件\n");
      exit(0);
     }
for(i=0;!feof(fp);i++)/*從文件中讀入數據並保存在結構體數組中*/
fread(&order[i],sizeof(struct magazine),1,fp);
fclose(fp);
return(i-1);
}

void save(int n)/*n表示保存n組數據,m表示保存在哪個文件夾裡*/
{
FILE *fp;
int i;
fp=fopen("record.txt","w");/*以只寫方式打開*/
if(fp==NULL)
{
printf("\n無法打開文件\n");
exit(0);
}
for(i=0;i<n;i++)  
  {  
    fwrite(&order[i],sizeof(struct magazine),1,fp);
                 
  }  
   fclose(fp);  
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved