逆向软件设计和开发——会员管理系统

打印 上一主题 下一主题

主题 850|帖子 850|积分 2550

作业来自csdn的会员管理系统C语言大作业。
点击查看代码
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <time.h>
  4. #include <string.h>
  5. #define N 100
  6. struct employee
  7. {
  8. int num,w;
  9. char name[10];
  10. char sex[10];
  11. int age;
  12. char xueli[30];
  13. int wage;
  14. int xiao;
  15. int yu;
  16. char addr[30];
  17. long tel;
  18. struct em*next;
  19. }em[100];
  20. void menu();
  21. void input();
  22. void save(int);
  23. void display();
  24. void del();
  25. void add();
  26. void search();
  27. void search_num();
  28. void search_xueli();
  29. void search_tel();
  30. void regain();
  31. void modify(); //定义各函数
  32. void menu() //菜单函数
  33. {
  34. printf(" ++++++++++++++++++++菜单管理++++++++++++++++++++\n");
  35. printf("     1.新会员登记                ");
  36. printf(" 2.会员信息修改\n");
  37. printf("     3.会员续费                  ");
  38. printf(" 4.会员消费结算\n");
  39. printf("     5.会员退卡                  ");
  40. printf(" 6.会员卡挂失\n");
  41. printf("     7.统计功能                  ");
  42. printf(" 8.退出\n");
  43. printf("+++++++++++++欢迎使用会员卡计费系统++++++++++++++\n");
  44. printf("\n");
  45. }
  46. int main()
  47. {    int n;
  48. int flag;
  49. char a;
  50. char *s1;
  51. int b;
  52. int j;
  53. int flg=0; printf("\t\t\t会员管理系统\n");
  54.         float x,y,z;
  55.         for(y=1.5;y>-1.5;y-=0.1){
  56.         for(x=-1.5;x<1.5;x+=0.05){
  57.         z=x*x+y*y-1;
  58.         putchar(z*z*z-x*x*y*y*y <=0.0 ? '@' : ' ');
  59.         }
  60.         system("color 0c");
  61.         putchar('\n');
  62.         }
  63.         printf("            ");
  64.     printf("++++++++++++++++++++++++++++++++++++++\n");
  65.     printf("\t    +                                     +\n");
  66.     printf("\t    +         欢迎来到会员管理系统        +\n");
  67.     printf("\t    +                                     +\n");
  68.     printf("\t    +                                     +\n");
  69.     printf("\t    +         请按任意键跳转到菜单        +\n");
  70.     printf("\t    +                                     +\n");
  71.     printf("\t    +                                     +\n");
  72.     printf("\t    ++++++++++++++++++++++++++++++++++++++\n");
  73.     getchar(); //等待用户输入任意键
  74.     system("cls");
  75.     system("color 07");
  76. menu(); //调用菜单函数
  77. {
  78. printf("请选择你需要操作的步骤(1--8):\n");
  79. scanf("%d",&n);
  80. if(n>=1&&n<=8)
  81. {
  82. flag=1;
  83. }
  84. else
  85. {
  86. flag=0;
  87. printf("您输入有误,请重新选择!");
  88. }
  89. }
  90. while(flag==0);
  91. while(flag==1)
  92. {
  93. switch(n)
  94. {
  95. case 1:printf(" 新会员登记\n");
  96. printf("\n");
  97. input();
  98. break;
  99. case 2:printf(" 会员信息修改\n");
  100. printf("\n");
  101. modify();
  102. break;
  103. case 3:printf(" 会员续费\n");
  104. printf("\n");
  105. add();
  106. break;
  107. case 4:printf(" 会员消费结算\n");
  108. printf("\n");
  109. search();
  110. break;
  111. case 5:printf("会员退卡\n");
  112. printf("\n");
  113. del();
  114. break;
  115. case 6:printf(" 会员卡挂失\n");
  116. printf("\n");
  117. regain();
  118. break;
  119. case 7:printf(" 统计功能\n");
  120. printf("\n");
  121. display();
  122. break;
  123. case 8:exit(0);
  124. break;
  125. default:break;
  126. }
  127. getchar();
  128. printf("\n");
  129. printf("是否继续进行(y or n):\n");
  130. scanf("%c",&a);
  131. if(a=='y')
  132. {
  133. flag=1;
  134. system("cls");
  135. menu(); //调用菜单函数
  136. printf("请再次选择你需要操作的步骤(1--7):\n");
  137. scanf("%d",&n);
  138. printf("\n");
  139. }
  140. else
  141. exit(0);
  142. }
  143. }
  144. void input() //新会员登记
  145. {
  146. int i;
  147. int m;
  148. int k;
  149. int countw;
  150. int countx;
  151. printf("请输入需要创建信息的会员人数:\n");
  152. scanf("%d",&m);
  153. for (i=0;i<m;i++)
  154. {
  155. printf("卡号");
  156. em[i].num=100001+i;
  157. if(em[i].num!=em[i-1].num)
  158. printf("%8d ",em[i].num);
  159. printf("\n");
  160. printf("请输入姓名: ");
  161. scanf("%s",em[i].name);
  162. getchar();
  163. printf("请输入性别: ");
  164. scanf("%s",em[i].sex);
  165. getchar();
  166. printf("请输入年龄: ");
  167. scanf("%d",&em[i].age);
  168. getchar();
  169. printf("请输入学历: ");
  170. scanf("%s",em[i].xueli);
  171. getchar();
  172. printf("请输入缴费金额: ");
  173. scanf("%d",&em[i].wage);
  174. getchar();
  175. printf("请输入电话: ");
  176. scanf("%ld",&em[i].tel);
  177. printf("\n");
  178. em[77].wage+=em[i].wage;
  179. em[i].yu=em[i].wage;
  180. }
  181. printf("\n创建完毕!\n");
  182. save(m);
  183. }
  184. void save(int m) //保存文件函数
  185. {
  186. int i;
  187. FILE*fp;
  188. if ((fp=fopen("employee_list","wb"))==NULL) //创建文件并判断是否能打开
  189. {
  190. printf ("不能打开文件\n");
  191. exit(0);
  192. }
  193. for (i=0;i<m;i++) //将内存中会员的信息输出到磁盘文件中去
  194. if (fwrite(&em[i],sizeof(struct employee),1,fp)!=1)
  195. printf("文件写入错误\n");
  196. fclose(fp);
  197. }
  198. int load() //导入函数
  199. {
  200.        
  201. FILE*fp;
  202. int i=0;
  203. if((fp=fopen("employee_list","rb"))==NULL)
  204. {
  205. printf ("不能打开文件\n");
  206. exit(0);
  207. }
  208. else
  209. {
  210. do
  211. {
  212. fread(&em[i],sizeof(struct employee),1,fp);
  213. i++;
  214. }
  215. while(feof(fp)==0);
  216. }
  217. fclose(fp);
  218. return(i-1);
  219. }
  220. void display() //浏览函数
  221. {
  222. int i;
  223. int k;
  224. int w=99;
  225. int m=load();
  226. printf("\n卡号\t姓名\t性别\t年龄\t学历\t 缴费金额\t消费金额\t电话\t");
  227. for(i=0;i<m;i++)
  228. {
  229.         for(k=0;k<m-i-1;k++)
  230.         {
  231.                 if(em[k].xiao<em[k+1].xiao)
  232.                 {
  233.                 em[w]=em[k];
  234.                 em[k]=em[k+1];
  235.                 em[k+1]=em[w];
  236.                 }
  237.         }
  238. }
  239. for(i=0;i<m;i++)
  240. {
  241. printf("\n %d\t%s\t%s\t%d\t%s\t   %d  \t    %d\t       %ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].xiao,em[i].tel);       
  242. }
  243. printf("---------------------------------------------------------------------------\n");
  244. printf("-----------------------------------------总缴费额++++++++总消费额----------\n");
  245. printf("                                           %d         %d",em[77].wage,em[77].xiao);
  246. }
  247. void del() //删除函数
  248. {
  249. int m=load();
  250. int i,j,n,t,flag;
  251. char name[20];
  252. printf("\n 原来的会员信息:\n");
  253. display(); // 调用浏览函数
  254. printf("\n");
  255. printf("请输入要删除的会员的姓名:\n");
  256. scanf("%s",name);
  257. for(flag=1,i=0;flag&&i<m;i++)
  258. {
  259. if(strcmp(em[i].name,name)==0)
  260. {
  261. printf("\n已找到此人,原始记录为:\n");
  262. printf("\n卡号       姓名 性别 年龄 缴费金额 余额\n");
  263. printf("\n%d\t%s\t%s\t%d\t%d\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage,em[i].yu);
  264. printf("\n确实要删除此人信息请按1,不删除请按0\n");
  265. scanf("%d",&n);
  266. if(n==1) //删除之后下面的会员往上错一个
  267. {
  268. for(j=i;j<m-1;j++)
  269. {
  270. strcpy(em[j].name,em[j+1].name);
  271. em[j].num=em[j+1].num;
  272. strcpy(em[j].sex,em[j+1].sex);
  273. em[j].age=em[j+1].age;
  274. em[j].wage=em[j+1].wage;
  275. em[j].yu=em[j+1].yu;
  276. }
  277. flag=0;
  278. }
  279. }
  280. }
  281. if(!flag)
  282. m=m-1;
  283. else
  284. printf("\n对不起,查无此人!\n");
  285. printf("\n 浏览删除后的所有会员信息:\n");
  286. save(m); //调用保存函数
  287. display(); //调用浏览函数
  288. printf("\n继续删除请按1;不再删除请按0\n");
  289. scanf("%d",&t);
  290. switch(t)
  291. {
  292. case 1:del();break;
  293. case 0:break;
  294. default :break;
  295. }
  296. }
  297. void add()//会员续费
  298. {
  299. FILE*fp;
  300. int num;
  301. int t;
  302. int i;
  303. int m=load();
  304. printf("\n 原来的会员信息:\n");
  305. display(); //调用浏览函数
  306. printf("\n请输入续费会员卡号:\n");
  307. scanf("%d",&num);
  308. for(i=0;i<m;i++)
  309. if(num==em[i].num)
  310. {
  311. printf("\n已找到此人,其记录为:\n");
  312. printf("\n卡号\t姓名\t缴费金额\t消费金额\n");
  313. printf("\n%d\t%s\t%d\t%d\n",em[i].num,em[i].name, em[i].wage,em[i].xiao);
  314. printf("\n输入续费金额\n");
  315. scanf("%d",&em[88].wage);
  316. em[i].wage= em[i].wage+em[88].wage;
  317. em[77].wage+=em[88].wage;
  318. em[i].yu=em[i].yu+em[88].wage;
  319. save(m);
  320. printf("\n续后金额\t%d\n",em[i].yu);
  321. printf("\n续费成功!\n");
  322. }
  323. }
  324. void search()//查询函数
  325. {
  326. int t,flag;
  327. do
  328. {
  329. printf("\n按卡号查询请按1; 按电话号码查询请按3,进入主函数按4\n");
  330. scanf("%d",&t);
  331. if(t>=1&&t<=4)
  332. {
  333. flag=1;
  334. break;
  335. }
  336. else
  337. {
  338. flag=0;
  339. printf("您输入有误,请重新选择!");
  340. }
  341. }
  342. while(flag==0);
  343. while(flag==1)
  344. {
  345. switch(t)
  346. {
  347. case 1:printf("按卡号查询\n");
  348. search_num();
  349. break;
  350. case 3:printf("按电话号码查询\n");
  351. search_tel();
  352. break;
  353. case 4:main();
  354. break;
  355. default:break;
  356. }
  357. }
  358. }
  359. void search_num()
  360. {
  361. int num;
  362. int i;
  363. int t;
  364. int m=load();
  365. printf("请输入要查找的会员卡号:\n");
  366. scanf("%d",&num);
  367. for(i=0;i<m;i++)
  368. if(num==em[i].num)
  369. {
  370. printf("\n已找到此人,其记录为:\n");
  371. printf("\n卡号\t 姓名\t性别\t年龄\t余额\t电话\n");
  372. printf("\n%d\t%s\t%s\t%d\t%d\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].yu,em[i].tel);
  373. printf("\n该次消费为:\n");
  374. scanf("%d",&em[i].xiao);
  375. em[i+100].xiao+=em[i].xiao;
  376. if(em[i].xiao>em[i].yu)
  377. {
  378. printf("\n余额不足,请及时续费\n");
  379. printf("\n");
  380. printf("返回查询函数请按1,继续查询卡号请按2\n");
  381. scanf("%d",&t);
  382. switch(t)
  383. {
  384. case 1:search();break;
  385. case 2:break;
  386. default :break;
  387. }
  388. }
  389. else{
  390.         if(em[i+100].xiao<1000)
  391. {
  392.         em[i].yu=em[i].yu-em[i].xiao;
  393.         em[77].xiao+=em[i].xiao;
  394. }
  395. else
  396. {
  397.         em[i].xiao=0.9*em[i].xiao;
  398.         em[i].yu=em[i].yu-em[i].xiao;
  399.         em[77].xiao+=em[i].xiao;
  400.         printf("恭喜您已成为vip会员,此次消费打九折!/n");
  401.         printf("此次消费为:%d",em[i].xiao);
  402. }
  403. save(m);
  404. }
  405. printf("\n卡号\t 姓名\t性别\t年龄\t缴费金额\t总消费金额\t余额\t电话\n");
  406. printf("\n%d\t%s\t%s\t%d\t%d\t%d\t%d\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage, em[i+100].xiao,em[i].yu,em[i].tel);
  407. break;
  408. }
  409. if(i==m)
  410. printf("\n对不起,查无此人\n");
  411. printf("\n");
  412. printf("返回查询函数请按1,继续查询卡号请按2\n");
  413. scanf("%d",&t);
  414. switch(t)
  415. {
  416. case 1:search();break;
  417. case 2: break;
  418. default:break;
  419. }
  420. }
  421. void search_tel()
  422. {
  423. long int tel;
  424. int i, t;
  425. int m=load();
  426. printf("请输入要查找的电话号码:\n");
  427. scanf("%ld",&tel);
  428. for(i=0;i<m;i++)
  429. if(tel==em[i].tel)
  430. {
  431. printf("\n已找到此人,其记录为:\n");
  432. printf("\n卡号\t姓名\t性别\t年龄\t缴费金额\t电话\n");
  433. printf("\n%d\t   %s\t%s\t%d\t %d\t   %ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage,em[i].tel);
  434. printf("\n该次消费为:\n");
  435. scanf("%d",&em[i].xiao);
  436. em[i+100].xiao+=em[i].xiao;
  437. if(em[i].xiao>em[i].yu)
  438. {
  439. printf("\n余额不足,请及时续费\n");
  440. printf("\n");
  441. printf("返回查询函数请按1,继续查询电话号码请按2\n");
  442. scanf("%d",&t);
  443. switch(t)
  444. {
  445. case 1:search();break;
  446. case 2:break;
  447. default :break;
  448. }
  449. }
  450. else{
  451.         if(em[i+100].xiao<1000)
  452. {
  453.         em[i].yu=em[i].yu-em[i].xiao;
  454.         em[77].xiao+=em[i].xiao;
  455. }
  456. else
  457. {
  458.         em[i].xiao=0.9*em[i].xiao;
  459.         em[i].yu=em[i].yu-em[i].xiao;
  460.         em[77].xiao+=em[i].xiao;
  461.         printf("恭喜您已成为vip会员,此次消费打九折!/n");
  462.         printf("此次消费为:%d",em[i].xiao);
  463. }
  464. save(m);
  465. }
  466. printf("\n卡号\t姓名\t性别\t年龄\t缴费金额\t总消费金额\t余额\t电话\n");
  467. printf("\n%d\t   %s\t%s\t%d\t%d\t%d\t    %d\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].wage, em[i+100].xiao,em[i].yu,em[i].tel);
  468. break;
  469. }
  470. if(i==m)
  471. printf("\n对不起,查无此人\n");
  472. printf("\n");
  473. printf("返回查询函数请按1,继续查询电话号码请按2\n");
  474. scanf("%d",&t);
  475. switch(t)
  476. {
  477. case 1:search();break;
  478. case 2:break;
  479. default :break;
  480. }
  481. }
  482. void modify() //修改函数
  483. {
  484. int num;
  485. char name[10];
  486. char sex[10];
  487. int age;
  488. char xueli[30];
  489. int wage;
  490. char addr[30];
  491. long int tel;
  492. int b,c,i,n,t,flag;
  493. int m=load(); //导入文件内的信息
  494. printf("\n 原来的会员信息:\n");
  495. display(); //调用浏览函数
  496. printf("\n");
  497. printf("请输入要修改的会员的姓名:\n");
  498. scanf("%s",name);
  499. for(flag=1,i=0;flag&&i<m;i++)
  500. {
  501. if(strcmp(em[i].name,name)==0)
  502. {
  503. printf("\n已找到此人,原始记录为:\n");
  504. printf("\n卡号\t姓名\t性别\t年龄\t学历\t 缴费金额\t消费金额\t电话\t");
  505. printf("\n %d\t%s\t%s\t%d\t%s\t   %d  \t    %d\t       %ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].xueli,em[i].wage,em[i].xiao,em[i].tel);
  506. printf("\n确实要修改此人信息请按1; 不修改请按0\n");
  507. scanf("%d",&n);
  508. if(n==1)
  509. {
  510. printf("\n需要进行修改的选项\n 1.卡号2.姓名3.性别4.年龄5.学历6.缴费金额7.电话\n");
  511. printf("请输入你想修改的那一项序号:\n");
  512. scanf("%d",&c);
  513. if(c>8||c<1)
  514. printf("\n选择错误,请重新选择!\n");
  515. }
  516. flag=0;
  517. }
  518. }
  519. if(flag==1)
  520. printf("\n对不起,查无此人!\n");
  521. do
  522. {
  523. switch(c) //因为当找到第i个会员时,for语句后i自加了,所以下面的应该把改后的信息赋值给第i-1个人
  524. {
  525. case 1:printf("卡号改为: ");
  526. scanf("%d",&num);
  527. em[i-1].num=num;
  528. break;
  529. case 2:printf("姓名改为: ");
  530. scanf("%s",name);
  531. strcpy(em[i-1].name,name);
  532. break;
  533. case 3:printf("性别改为: ");
  534. scanf("%s",&sex);
  535. strcpy(em[i-1].sex,sex);
  536. getchar();
  537. break;
  538. case 4:printf("年龄改为: ");
  539. scanf("%d",&age);
  540. em[i-1].age=age;
  541. break;
  542. case 5:printf("学历改为: ");
  543. scanf("%s",xueli);
  544. strcpy(em[i-1].xueli,xueli);
  545. break;
  546. case 6:printf("缴费金额改为: ");
  547. scanf("%d",&wage);
  548. em[i-1].wage=wage;
  549. break;
  550. case 7:printf("电话改为: ");
  551. scanf("%ld",&tel);
  552. em[i-1].tel=tel;
  553. break;
  554. }
  555. printf("\n");
  556. printf("\n是否确定所修改的信息\n 是请按1; 不,重新修改请按2: \n");scanf("%d",&b);
  557. }
  558. while(b==2);
  559. printf("\n浏览修改后的所有会员信息:\n");
  560. printf("\n");
  561. save(m);
  562. display();
  563. printf("\n继续修改请按1不再修改请按0\n");
  564. scanf("%d",&t);
  565. switch(t)
  566. {
  567.        
  568. case 1:;break;
  569. case 0:break;
  570. default :break;
  571. }
  572. getchar();
  573. }
  574. void regain()
  575. {
  576.         int num;
  577. int i;
  578. int j;
  579. int t;
  580. int flag;
  581. int n;
  582. int m=load();
  583. printf("请输入要挂失的会员卡号:\n");
  584. scanf("%d",&num);
  585. for(i=0;i<m;i++)
  586. if(num==em[i].num)
  587. {
  588. printf("\n已找到此人,其记录为:\n");
  589. printf("\n卡号\t 姓名\t性别\t年龄\t余额\t电话\n");
  590. printf("\n%d\t%s\t%s\t%d\t%d\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].yu,em[i].tel);
  591. printf("\n确定挂失请按1取消挂失请按0\n");
  592. scanf("%d",&t);
  593. switch(t)
  594. {
  595.        
  596. case 1:
  597. {
  598. em[i].num=em[i].num+m;
  599. save(m);
  600. printf("\n挂失成功,现记录为:\n");
  601. printf("\n卡号\t 姓名\t性别\t年龄\t余额\t电话\n");
  602. printf("\n%d\t%s\t%s\t%d\t%d\t%ld\n",em[i].num,em[i].name,em[i].sex,em[i].age,em[i].yu,em[i].tel);
  603. break;
  604. }
  605. case 0:break;
  606. default :break;
  607. }
  608. getchar();
  609. }
  610. }
复制代码

总结
通过逆向分析现有的会员管理系统,我学习了渐渐拆解其内部逻辑和数据结构。这一过程不仅锻炼了我的逻辑头脑能力,也让我对软件架构有了更深入的理解。
在开发新的会员管理系统时,我联合逆向分析的效果,通过链表优化了系统的性能,并增长了新的功能以满足用户需求。这一过程让我深刻领会到了需求分析的重要性,只有准确理解用户需求,才气开发出真正符适用户盼望的系统。
总的来说,这次逆向软件设计和开发的履历让我受益匪浅。我不仅提升了自身的技术能力,也对软件开发过程有了更全面、更深入的认识。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表