书本上的一个例题——股票交易系统

  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("\n\n\n\t\t********************股票交易平台********************\n\n");
 53     printf("\n\n\n\t\t需要更新股票信息吗?(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("\n\t\t输入股票数:");
 68     scanf("%d",&NUM);
 69     if((fpData=fopen("Stock_File.dat","wb"))==NULL)
 70     {
 71         printf("FILE ERROR\n");
 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("\n\t\t请输入股票代码(字符个数<= 6:)");
 87     gets(a->StockCode);
 88     printf("\n\t\t请输入股票名称:");
 89     gets(a->StockName);
 90     printf("\n\t\t请输入股票总数:");
 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("\n\n\n\t\t*************************欢迎进入股票交易平台*******************\n\n");
102     printf("\t\t\t显示股票情况            [v]\n");
103     printf("\t\t\t老用户登录            [l]\n");
104     printf("\t\t\t新用户注册            [r]\n");
105     printf("\t\t\t退出交易系统            [q]\n");
106     printf("\n\n\t\t\t请选择:");
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("\n\n\n\t********************股票信息*****************\n\n\n");
131             printf("\t\t 股票名称    股票代码    总股数    可交易的股数\n\n");
132             if((fpData=fopen("Stock_File.dat","rb"))==NULL)
133             {
134                 printf("FILE ERROR!\n");
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("\n\n\n\t********************用户登录*****************\n\n\n");
148             printf("\t\t\t 用户名:");
149             scanf("%s",CustomerName);
150             printf("\n\t\t\t 密码:");
151             scanf("%s",PassWord);
152             getchar();
153             Login(CustomerName,PassWord,&strCust);        //用户登录
154             Interface_StockExchange(&strTemp);            //返回股票交易平台
155         case 'r':
156             system("cls");
157             printf("\n\n\n\t********************用户注册*****************\n\n\n");
158             Register(&strCust);
159             if((fpCust=fopen("customer.dat","ab"))==NULL)
160             {
161                 printf("FILE ERROR!\n");
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("\n\n\n\n\n\n\t\t 谢谢使用股票交易平台\n\n");
171             printf("\t\t 再        见\n\n");
172             getchar();
173             getchar();
174             exit(0);
175     }
176 }
177 
178 /* 6、显示股票信息 */
179 
180 void Display_StockMarket(Stock * a)            //显示股票信息
181 {
182     printf("\n\t\t%-12s%-10s%-10ld%-10ld\n",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!\n");
194         exit(1);
195     }
196     while(!feof(fp))                        //查看用户库中的信息
197     {
198         Flag=fread(a,sizeof(Customer),1,fp);
199         if(Flag!=1)
200         {
201             printf("\n\n\t\t 该用户还未注册!\n");
202             printf("\n\n\t\t 按任意键返回\n");
203             getchar();
204             break;
205         }
206         if(strcmp(name,a->CustomerName)==0&&strcmp(password,a->PassWord)==0)
207         {
208             printf("\t\t\t 登录成功(按任意键返回)");
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("\n\n\n\t\t*************************欢迎进入用户操作平台*******************\n\n");
227         printf("\n\n\t\t\t[b]-------买股票\n");
228         printf("\t\t\t[s]-------卖股票\n");
229         printf("\t\t\t[v]-------显示用户股票\n");
230         printf("\t\t\t[q]-------退出交易\n");
231         printf("\n\n\t\t\t请选择:");
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("\n\n\n\t********************股票信息*****************\n\n\n");
262     printf("\t\t 股票名称    股票代码    总股数    可交易的股数\n\n");
263     if((fpData=fopen("Stock_File.dat","rb"))==NULL)        //打开股票数据库
264     {
265         printf("FILE ERROR!\n");
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!\n");
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("\n\t\t请输入要买入的股票代码:");
284     scanf("%s",szShareCode);
285     printf("\n\t\t请输入股数:");
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!\n");
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!\n");
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("\n\n\t\t该股票可交易份额不足,不能完成本次交易\n");
321                 printf("\n\t\t退出本次交易\n");
322                 getchar();
323                 break;
324             }
325         }
326         else
327         {
328             nNum++;
329             if(nNum==NUM);
330             {
331                 printf("\n\n\t\t输入的股票代码有误……\n");
332                 printf("\n\t\t退出本次交易\n");
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!\n");
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!\n");
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("\n\n\n\t********************用户股票信息*****************\n\n\n");
371     printf("\t\t 股票名称    股票代码    持股数\n\n");
372     for(nNum=0;nNum<NUM;nNum++)
373     {
374         if(straCuSto[nNum].StockVal!=0)
375             printf("\t\t%s\t\t%s\t%ld\n",straCuSto[nNum].StockName,straCuSto[nNum].StockCode,straCuSto[nNum].StockVal);
376     }
377     getchar();
378     printf("\n\t\t请输入要卖的股票代码:");
379     scanf("%s",szShareCode);
380     printf("\n\t\t请输入要卖的股数:");
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!\n");
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!\n");
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("\n\n\t\t你可交易股票份额不足,不能完成本次交易\n");
414                 printf("\n\t\t退出本次交易\n");
415                 getchar();
416                 break;
417             }
418         }
419         else
420         {
421             nNum++;
422             if(nNum==NUM)
423             {
424                 printf("\n\n\t\t输入的股票代码有误……\n");
425                 printf("\n\t\t退出本次交易\n");
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!\n");
446         exit(0);
447     }
448     fread(&NUM,sizeof(NUM),1,fpData);
449     if((fpCust=fopen(a->CustomerName,"rb"))==NULL)        //打开用户股票账户库
450     {
451         printf("FILE ERROR!\n");
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("\n\n\n\t********************用户股票信息*****************\n\n\n");
459     printf("\t\t 股票名称    股票代码    持股数\n\n");
460     for(nNum=0;nNum<NUM;nNum++)
461     {
462         if(straCuSto[nNum].StockVal!=0)
463             printf("\t\t%s\t\t%s\t%ld\n",straCuSto[nNum].StockName,straCuSto[nNum].StockCode,straCuSto[nNum].StockVal);
464         flag=0;
465     }
466     if(flag)
467         printf("\n\t\t暂无可显示的股票信息");
468     getchar();
469     getchar();
470 }
471 
472 /* 12、新用户注册 */
473 
474 void Register(Customer * a)                        //新用户注册
475 {
476     system("cls");
477     getchar();
478     printf("\n\n\t********************用户注册*****************\n\n");
479     printf("\n\t\t\t请输入用户名:");
480     scanf("%s",a->CustomerName);
481     printf("\n\t\t\t请输入密码:");
482     scanf("%s",a->PassWord);
483     getchar();
484     system("cls");
485     printf("\n\n你已注册成功\n");
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!\n");
497         exit(0);
498     }
499     fread(&NUM,sizeof(NUM),1,fpData);
500     if((fpCust=fopen(a->CustomerName,"wb"))==NULL)        //打开用户股票账户库
501     {
502         printf("FILE ERROR!\n");
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 }

 

posted @ 2013-06-25 12:13  doodle777  阅读(401)  评论(0编辑  收藏  举报