zoukankan      html  css  js  c++  java
  • 书本上的一个例题——股票交易系统

      1 /* 1、预处理命令及函数变量 */
      2 
      3 #include<stdio.h>
      4 #include<stdlib.h>
      5 #include<string.h>
      6 #include<conio.h>
      7 #include<math.h>
      8 #define MAX 100
      9 
     10 typedef struct custstock {            //用户账户数据
     11     char StockCode[6];                //股票代码
     12     char StockName[30];                //股票名称
     13     long StockVal;                    //拥有股票数
     14 }CustStock;
     15 
     16 typedef struct custom {                //已注册用户数据
     17     char CustomerName[20];            //用户名
     18     char PassWord[6];                //密码
     19 }Customer;
     20 
     21 typedef struct stock {                //股票数据
     22     char StockCode[6];                //股票代码
     23     char StockName[30];                //股票名称
     24     long StockVol;                    //总股数
     25     long StockAva;                    //可交易股数
     26     long StockNum;                    //股票数
     27     char chChoice;                    //股票操作选择
     28 }Stock;
     29 
     30 int NUM;
     31 
     32 void Login(char *,char *,Customer *);
     33 void Register(Customer *);
     34 void Interface_CustOperation(Customer *);
     35 void Interface_StockExchange(Stock *);
     36 void Display_StockMarket(Stock *);
     37 void Menu_Choice(Stock *);
     38 void InitCustData(Customer *);
     39 void Buy(Customer *);
     40 void Sell(Customer *);
     41 void View(Customer *);
     42 void Input_Stock();
     43 void Input_NewStock(Stock *);
     44 
     45 /* 2、主函数 */
     46 
     47 void main()
     48 {
     49     char chChoice;
     50     Stock straSto[MAX],strTemp;
     51     system("cls");
     52     printf("
    
    
    		********************股票交易平台********************
    
    ");
     53     printf("
    
    
    		需要更新股票信息吗?(y|Y--yes   n|N--no)");
     54     scanf("%c",&chChoice);
     55     if('y'==chChoice||'Y'==chChoice)
     56         Input_Stock();                    //输入股票信息
     57     Interface_StockExchange(&strTemp);    //股票交易平台
     58 }
     59 
     60 /* 3、输入股票信息 */
     61 
     62 void Input_Stock()                        //输入股票信息
     63 {
     64     FILE * fpData;
     65     int nNum;
     66     Stock straSto[MAX],strTemp;
     67     printf("
    		输入股票数:");
     68     scanf("%d",&NUM);
     69     if((fpData=fopen("Stock_File.dat","wb"))==NULL)
     70     {
     71         printf("FILE ERROR
    ");
     72         exit(0);
     73     }
     74     fwrite(&NUM,sizeof(NUM),1,fpData);
     75     for(nNum=0;nNum<NUM;nNum++)
     76     {                                    //输入股票数据
     77         Input_NewStock(&straSto[nNum]);
     78         fwrite(&straSto[nNum],sizeof(straSto[nNum]),1,fpData);
     79     }
     80     fclose(fpData);
     81 }
     82 void Input_NewStock(Stock * a)            //输入股票数据
     83 {
     84     system("cls");
     85     getchar();
     86     printf("
    		请输入股票代码(字符个数<= 6:)");
     87     gets(a->StockCode);
     88     printf("
    		请输入股票名称:");
     89     gets(a->StockName);
     90     printf("
    		请输入股票总数:");
     91     scanf("%ld",&a->StockVol);
     92     a->StockAva=a->StockVol;            //初始化可交易的股票数
     93     a->StockNum++;
     94 }
     95 
     96 /* 4、股票交易平台主界面 */
     97 
     98 void Interface_StockExchange(Stock * a)    //股票交易平台
     99 {
    100     system("cls");
    101     printf("
    
    
    		*************************欢迎进入股票交易平台*******************
    
    ");
    102     printf("			显示股票情况            [v]
    ");
    103     printf("			老用户登录            [l]
    ");
    104     printf("			新用户注册            [r]
    ");
    105     printf("			退出交易系统            [q]
    ");
    106     printf("
    
    			请选择:");
    107     scanf("%c",&a->chChoice);
    108     if(a->chChoice!='q'&&a->chChoice!='v'&&a->chChoice!='l'&&a->chChoice!='r')
    109     {
    110         system("cls");
    111         Interface_StockExchange(a);        //股票交易平台
    112     }
    113     else 
    114         Menu_Choice(a);                    //执行相关选择
    115 }
    116 
    117 /* 5、股票平台操作 */
    118 
    119 void Menu_Choice(Stock * a)                //执行相关选择
    120 {
    121     int nNum;
    122     FILE * fpCust,*fpData;
    123     Stock strTemp,straCust[MAX]; 
    124     Customer strCust;
    125     char CustomerName[20],PassWord[6];
    126     switch(a->chChoice)
    127     {
    128         case 'v':                        //显示股票情况
    129             system("cls");
    130             printf("
    
    
    	********************股票信息*****************
    
    
    ");
    131             printf("		 股票名称    股票代码    总股数    可交易的股数
    
    ");
    132             if((fpData=fopen("Stock_File.dat","rb"))==NULL)
    133             {
    134                 printf("FILE ERROR!
    ");
    135                 exit(0);
    136             }
    137             fread(&NUM,sizeof(NUM),1,fpData);
    138             for(nNum=0;nNum<NUM;nNum++)
    139                 fread(&straCust[nNum],sizeof(straCust[nNum]),1,fpData);
    140             fclose(fpData);
    141             for(nNum=0;nNum<NUM;nNum++)
    142                 Display_StockMarket(&straCust[nNum]);    //显示股票信息
    143             getch();
    144             Interface_StockExchange(&strTemp);            //返回股票交易平台
    145         case 'l':
    146             system("cls");
    147             printf("
    
    
    	********************用户登录*****************
    
    
    ");
    148             printf("			 用户名:");
    149             scanf("%s",CustomerName);
    150             printf("
    			 密码:");
    151             scanf("%s",PassWord);
    152             getchar();
    153             Login(CustomerName,PassWord,&strCust);        //用户登录
    154             Interface_StockExchange(&strTemp);            //返回股票交易平台
    155         case 'r':
    156             system("cls");
    157             printf("
    
    
    	********************用户注册*****************
    
    
    ");
    158             Register(&strCust);
    159             if((fpCust=fopen("customer.dat","ab"))==NULL)
    160             {
    161                 printf("FILE ERROR!
    ");
    162                 exit(0);
    163             }
    164             fwrite(&strCust,sizeof(strCust),1,fpCust);
    165             fclose(fpCust);
    166             InitCustData(&strCust);                        //初始化新用户注册用户库
    167             Interface_StockExchange(&strTemp);            //返回股票交易平台
    168         case 'q':
    169             system("cls");
    170             printf("
    
    
    
    
    
    		 谢谢使用股票交易平台
    
    ");
    171             printf("		 再        见
    
    ");
    172             getchar();
    173             getchar();
    174             exit(0);
    175     }
    176 }
    177 
    178 /* 6、显示股票信息 */
    179 
    180 void Display_StockMarket(Stock * a)            //显示股票信息
    181 {
    182     printf("
    		%-12s%-10s%-10ld%-10ld
    ",a->StockName,a->StockCode,a->StockVol,a->StockAva);
    183 }
    184 
    185 /* 7、用户登录 */
    186 
    187 void Login(char * name,char * password,Customer * a)
    188 {
    189     FILE * fp;
    190     int Flag;
    191     if((fp=fopen("customer.dat","rb"))==NULL)
    192     {
    193         printf("Read File error!
    ");
    194         exit(1);
    195     }
    196     while(!feof(fp))                        //查看用户库中的信息
    197     {
    198         Flag=fread(a,sizeof(Customer),1,fp);
    199         if(Flag!=1)
    200         {
    201             printf("
    
    		 该用户还未注册!
    ");
    202             printf("
    
    		 按任意键返回
    ");
    203             getchar();
    204             break;
    205         }
    206         if(strcmp(name,a->CustomerName)==0&&strcmp(password,a->PassWord)==0)
    207         {
    208             printf("			 登录成功(按任意键返回)");
    209             getchar();
    210             Interface_CustOperation(a);        //登录成功,进入用户操作平台
    211             break;
    212         }
    213     }
    214     fclose(fp);    
    215 }
    216 
    217 /* 8、用户操作平台界面 */
    218 
    219 void Interface_CustOperation(Customer * a)    //用户操作平台,完成股票交易
    220 {
    221     char choice;
    222     Stock strTemp;
    223     do
    224     {
    225         system("cls");
    226         printf("
    
    
    		*************************欢迎进入用户操作平台*******************
    
    ");
    227         printf("
    
    			[b]-------买股票
    ");
    228         printf("			[s]-------卖股票
    ");
    229         printf("			[v]-------显示用户股票
    ");
    230         printf("			[q]-------退出交易
    ");
    231         printf("
    
    			请选择:");
    232         scanf("%c",&choice);
    233         if(choice!='b'&&choice!='s'&&choice!='v'&&choice!='q')
    234             break;
    235         else
    236         {
    237             switch(choice)
    238             {
    239             case 'b':Buy(a);break;                //买股票
    240             case 's':Sell(a);break;                //买股票
    241             case 'v':View(a);break;                //显示用户的股票信息
    242             case 'q':Interface_StockExchange;    //返回股票交易平台
    243             }
    244         }
    245     } while (1);
    246 }
    247 
    248 
    249 /* 9、买股票操作 */
    250 
    251 void Buy(Customer * a)                                    //买股票
    252 {
    253     FILE * fpData, *fpCust;
    254     Stock straShare[MAX];
    255     CustStock straCuSto[MAX];
    256     Customer straCust[MAX];
    257     int nNum;
    258     char szShareCode[6];
    259     long nVolume;
    260     system("cls");
    261     printf("
    
    
    	********************股票信息*****************
    
    
    ");
    262     printf("		 股票名称    股票代码    总股数    可交易的股数
    
    ");
    263     if((fpData=fopen("Stock_File.dat","rb"))==NULL)        //打开股票数据库
    264     {
    265         printf("FILE ERROR!
    ");
    266         exit(0);
    267     }
    268     fread(&NUM,sizeof(NUM),1,fpData);
    269     for(nNum=0;nNum<NUM;nNum++)
    270         fread(&straShare[nNum],sizeof(straShare[nNum]),1,fpData);
    271     if((fpCust=fopen(a->CustomerName,"rb"))==NULL)        //打开用户股票账户库
    272     {
    273         printf("FILE ERROR!
    ");
    274         exit(0);
    275     }
    276     for(nNum=0;nNum<NUM;nNum++)
    277         fread(&straCuSto[nNum],sizeof(straCuSto[nNum]),1,fpCust);
    278     fclose(fpData);
    279     fclose(fpCust);
    280     for(nNum=0;nNum<NUM;nNum++)
    281         Display_StockMarket(&straShare[nNum]);            //显示股票信息
    282     getchar();
    283     printf("
    		请输入要买入的股票代码:");
    284     scanf("%s",szShareCode);
    285     printf("
    		请输入股数:");
    286     scanf("%ld",&nVolume);
    287     getchar();
    288     nNum=0;
    289     while((strcmp(straShare[nNum].StockCode,szShareCode)==0)||nNum<NUM)
    290     {
    291         if(strcmp(straShare[nNum].StockCode,szShareCode)==0)
    292         {
    293             if(straShare[nNum].StockAva>nVolume)        //符合买股票条件
    294             {
    295                 straCuSto[nNum].StockVal=straCuSto[nNum].StockVal+nVolume;
    296                 strcpy(straCuSto[nNum].StockName,straShare[nNum].StockName);
    297                 strcpy(straCuSto[nNum].StockCode,straShare[nNum].StockCode);
    298                 straShare[nNum].StockAva=straShare[nNum].StockAva-nVolume;
    299                 if((fpCust=fopen(a->CustomerName,"wb"))==NULL)
    300                 {
    301                     printf("FILE ERROR!
    ");
    302                     exit(0);
    303                 }
    304                 for(nNum=0;nNum<NUM;nNum++)
    305                     fwrite(&straCuSto[nNum],sizeof(straCuSto[nNum]),1,fpCust);
    306                 if((fpData=fopen("Stock_File.dat","wb"))==NULL)
    307                 {
    308                     printf("FILE ERROR!
    ");
    309                     exit(0);
    310                 }
    311                 fwrite(&NUM,sizeof(NUM),1,fpData);
    312                 for(nNum=0;nNum<NUM;nNum++)
    313                     fwrite(&straShare[nNum],sizeof(straShare[nNum]),1,fpData);
    314                 fclose(fpData);
    315                 fclose(fpCust);
    316                 break;
    317             }
    318             else
    319             {
    320                 printf("
    
    		该股票可交易份额不足,不能完成本次交易
    ");
    321                 printf("
    		退出本次交易
    ");
    322                 getchar();
    323                 break;
    324             }
    325         }
    326         else
    327         {
    328             nNum++;
    329             if(nNum==NUM);
    330             {
    331                 printf("
    
    		输入的股票代码有误……
    ");
    332                 printf("
    		退出本次交易
    ");
    333                 getchar();
    334                 break;
    335             }
    336         }
    337     }
    338 }
    339 
    340 /* 10、卖股票操作 */
    341 
    342 void Sell(Customer * a)                                    //卖股票
    343 {
    344     FILE * fpData, *fpCust;
    345     Stock straShare[MAX];
    346     CustStock straCuSto[MAX];
    347     Customer straCust[MAX];
    348     int nNum;
    349     char szShareCode[6];
    350     long nVolume;
    351     system("cls");
    352 
    353     if((fpData=fopen("Stock_File.dat","rb"))==NULL)        //打开股票数据库
    354     {
    355         printf("FILE ERROR!
    ");
    356         exit(0);
    357     }
    358     fread(&NUM,sizeof(NUM),1,fpData);
    359     for(nNum=0;nNum<NUM;nNum++)
    360         fread(&straShare[nNum],sizeof(straShare[nNum]),1,fpData);
    361     if((fpCust=fopen(a->CustomerName,"rb"))==NULL)        //打开用户股票账户库
    362     {
    363         printf("FILE ERROR!
    ");
    364         exit(0);
    365     }
    366     for(nNum=0;nNum<NUM;nNum++)
    367         fread(&straCuSto[nNum],sizeof(straCuSto[nNum]),1,fpCust);
    368     fclose(fpData);
    369     fclose(fpCust);
    370     printf("
    
    
    	********************用户股票信息*****************
    
    
    ");
    371     printf("		 股票名称    股票代码    持股数
    
    ");
    372     for(nNum=0;nNum<NUM;nNum++)
    373     {
    374         if(straCuSto[nNum].StockVal!=0)
    375             printf("		%s		%s	%ld
    ",straCuSto[nNum].StockName,straCuSto[nNum].StockCode,straCuSto[nNum].StockVal);
    376     }
    377     getchar();
    378     printf("
    		请输入要卖的股票代码:");
    379     scanf("%s",szShareCode);
    380     printf("
    		请输入要卖的股数:");
    381     scanf("%ld",&nVolume);
    382     getchar();
    383     nNum=0;
    384     while((strcmp(straShare[nNum].StockCode,szShareCode)==0)||nNum<NUM)
    385     {
    386         if(strcmp(straShare[nNum].StockCode,szShareCode)==0)
    387         {
    388             if(straCuSto[nNum].StockVal>nVolume)        //符合卖股票条件
    389             {
    390                 straCuSto[nNum].StockVal=straCuSto[nNum].StockVal-nVolume;
    391                 straShare[nNum].StockAva=straShare[nNum].StockAva+nVolume;
    392                 if((fpCust=fopen(a->CustomerName,"wb"))==NULL)
    393                 {
    394                     printf("FILE ERROR!
    ");
    395                     exit(0);
    396                 }
    397                 for(nNum=0;nNum<NUM;nNum++)
    398                     fwrite(&straCuSto[nNum],sizeof(straCuSto[nNum]),1,fpCust);
    399                 if((fpData=fopen("Stock_File.dat","wb"))==NULL)
    400                 {
    401                     printf("FILE ERROR!
    ");
    402                     exit(0);
    403                 }
    404                 fwrite(&NUM,sizeof(NUM),1,fpData);
    405                 for(nNum=0;nNum<NUM;nNum++)
    406                     fwrite(&straShare[nNum],sizeof(straShare[nNum]),1,fpData);
    407                 fclose(fpData);
    408                 fclose(fpCust);
    409                 break;
    410             }
    411             else
    412             {
    413                 printf("
    
    		你可交易股票份额不足,不能完成本次交易
    ");
    414                 printf("
    		退出本次交易
    ");
    415                 getchar();
    416                 break;
    417             }
    418         }
    419         else
    420         {
    421             nNum++;
    422             if(nNum==NUM)
    423             {
    424                 printf("
    
    		输入的股票代码有误……
    ");
    425                 printf("
    		退出本次交易
    ");
    426                 getchar();
    427                 break;
    428             }
    429         }
    430     }
    431 }
    432 
    433 /* 11、显示用户股票信息 */
    434 
    435 void View(Customer * a)                                    //显示用户股票
    436 {
    437     FILE * fpData, *fpCust;
    438     CustStock straCuSto[MAX];
    439     int nNum;
    440     int flag=1;
    441     system("cls");
    442 
    443     if((fpData=fopen("Stock_File.dat","rb"))==NULL)        //打开股票数据库
    444     {
    445         printf("FILE ERROR!
    ");
    446         exit(0);
    447     }
    448     fread(&NUM,sizeof(NUM),1,fpData);
    449     if((fpCust=fopen(a->CustomerName,"rb"))==NULL)        //打开用户股票账户库
    450     {
    451         printf("FILE ERROR!
    ");
    452         exit(0);
    453     }
    454     for(nNum=0;nNum<NUM;nNum++)
    455         fread(&straCuSto[nNum],sizeof(straCuSto[nNum]),1,fpCust);
    456     fclose(fpData);
    457     fclose(fpCust);
    458     printf("
    
    
    	********************用户股票信息*****************
    
    
    ");
    459     printf("		 股票名称    股票代码    持股数
    
    ");
    460     for(nNum=0;nNum<NUM;nNum++)
    461     {
    462         if(straCuSto[nNum].StockVal!=0)
    463             printf("		%s		%s	%ld
    ",straCuSto[nNum].StockName,straCuSto[nNum].StockCode,straCuSto[nNum].StockVal);
    464         flag=0;
    465     }
    466     if(flag)
    467         printf("
    		暂无可显示的股票信息");
    468     getchar();
    469     getchar();
    470 }
    471 
    472 /* 12、新用户注册 */
    473 
    474 void Register(Customer * a)                        //新用户注册
    475 {
    476     system("cls");
    477     getchar();
    478     printf("
    
    	********************用户注册*****************
    
    ");
    479     printf("
    			请输入用户名:");
    480     scanf("%s",a->CustomerName);
    481     printf("
    			请输入密码:");
    482     scanf("%s",a->PassWord);
    483     getchar();
    484     system("cls");
    485     printf("
    
    你已注册成功
    ");
    486     getchar();;
    487 }
    488 
    489 void InitCustData(Customer * a)                            //初始化新注册用户库
    490 {
    491     int nNum;
    492     CustStock straCuSto[MAX];
    493     FILE * fpCust, * fpData;
    494     if((fpData=fopen("Stock_File.dat","rb"))==NULL)        //打开股票数据库
    495     {
    496         printf("FILE ERROR!
    ");
    497         exit(0);
    498     }
    499     fread(&NUM,sizeof(NUM),1,fpData);
    500     if((fpCust=fopen(a->CustomerName,"wb"))==NULL)        //打开用户股票账户库
    501     {
    502         printf("FILE ERROR!
    ");
    503         exit(0);
    504     }
    505     for(nNum=0;nNum<NUM;nNum++)
    506     {
    507         strcpy(straCuSto[nNum].StockName,"");
    508         strcpy(straCuSto[nNum].StockCode,"");
    509         straCuSto[nNum].StockVal=0;
    510         fwrite(&straCuSto[nNum],sizeof(straCuSto[nNum]),1,fpCust);
    511     }
    512     fclose(fpCust);
    513     fclose(fpData);
    514 }
  • 相关阅读:
    Js页面自动跳转
    关于express项目的创建与启动
    在采用vue-cli Post Get
    vue-cli 组件运用
    成员变量的初始化取值和权限修饰符
    面向对象
    java基础数据类型复习
    java包装类
    之前所学复习汇总
    对jdk+jre+jvm的简单了解
  • 原文地址:https://www.cnblogs.com/doodle777/p/3154439.html
Copyright © 2011-2022 走看看