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 }
转载于:https://www.cnblogs.com/doodle777/p/3154439.html