C程序设计实习报告.doc_第1页
C程序设计实习报告.doc_第2页
C程序设计实习报告.doc_第3页
C程序设计实习报告.doc_第4页
C程序设计实习报告.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C程序设计实习报告题目:购物卡管理系统学 院: 机械与电子信息学院 专 业: 机械设计制造以及自动化 姓 名: 李泽志 班级学号: 20091002525(072095-17) 指导教师: 徐凯 2011 年 7 月 15 日目 录一 题目要求 2二 需求分析 2三 程序结构设计 2四 详细设计 341 全局变量,结构体和函数申明 442 主函数和登录函数 443 公共函数54.3.1 获取当前系统时间 54.3.2管理员密码设置54.3.3管理员密码核对 6 4.3.4账户密码设置84.3.5账户密码设置94.3.6 身份证号核对 1044 管理员相关模块 104.4.1 获取当前系统时间 104.4.2购物卡制作 114.4.3 购物卡签发124.4.4 购物卡注销144.4.5 购物卡信息查看 154.4.6 购物卡查看与注销 1645 持卡人相关模块174.5.1 消费 174.5.2 充值 184.5.3 总记录查询(此功能未完成) 184.5.4 消费记录查询(此功能未完成) 194.4.5 充值记录查询(此功能未完成)194.5.6 持卡人主界面 20五 程序实际运行情况 24六 课程设计小结 28七 参考文献 29一 题目要求设计购物卡管理系统,实现如下功能:(1) 实现系统内制卡,发卡功能。(2) 实现系统内购物卡账户及相关账户管理。(3) 实现购物卡交易和合法性检查。(4) 实现购物卡交易积分功能。(5) 实现购物卡报表功能。(6) 数据以文件形式存储。【提示】制卡:指申请一个购物卡,但还没有使用。发卡:指购物卡已经使用。实现卡交易:指从卡中消费掉一定金额。二 需求分析 根据题目要求,由于管理员帐号,密码,购物卡帐号密码和余额,状态以及消费记录存放在文件中,应实现文件的输入,输出操作;要查看购物卡信息,应提供显示操作;另外还需提供选择菜单功能。三 程序结构设计见程序结构图:购物卡管理系统管理员登录会员登录制卡发卡购物卡管理管理员帐号和密码修改消费充值总记录查询消费记录查询充值记录查询密码修改挂失解挂失注销购物卡信息查看图2-1 程序结构图四 详细设计41 全局变量,结构体和函数申明本程序是运行于windows平台的购物卡管理系统,开发采用visual C+ 6.0 C语言,不保证能在linux平台下运行。根据题目要求,设置cdlist 和acclst两个结构体,cdlist结构体用于存储购物卡卡号密码等信息。acclist结构体用于存储每张卡的消费记录。设置gfp和cfp两个文件指针,用于操作不同的文件。程序见下:#include#include#include#include#include#define ul unsigned intFILE *gfp;FILE *cfp;#define cdlist struct card_listcdlist /用于购物卡管理ul cardid; /卡号char name20; /持卡人姓名char idd19; /持卡人身份证号,用于重置密码和解挂失ul account; /关联账户,在未启用补卡功能前与卡号系统char pswd20; /密码unsigned long money; /余额,本应用float类型但无奈用float类型时输入输出错误ul jifen; /积分int zhuangtai; /购物卡状态,0:还未颁发;1:正常 2:挂失 3:注销char cc; /一条信息结束的标记ka100;#define acclst struct account_listunsigned wn;acclst /帐号类型char atime22; /帐号操作时间char xmu20; /1:消费 2:积分兑换 3:查询 4:修改密码 5:挂失 6:解挂失unsigned long money_in; /收入,本应用float类型但无奈用float类型时输入输出错误 unsigned long money_out; /支出unsigned long money_have; /账户余额ul jifen_in; /积分收入ul jifen_out; /积分支出ul jifen; /积分char didian20; /网关char cc; /用作信息读取的标识zh100;unsigned wn; /全局变量,消费记录和充值记录的数目char xz22; /全局变量,用于存储获得的当前系统时间void now(char x22) /公共函数,用于获取当前系统时间void pst(FILE *fp) /管理员密码设置int bospasswd() /管理员密码核对void ka_pass(ul i) /帐户密码设置int card_sec(ul i) /帐户密码核对42 主函数和登录函数 主函数负责调用登录函数,登录函数实现第一层登录菜单,即管理员主界函数面和持卡人主界面函数的调用。/* *主函数* */显示第一层菜单输入t,t=03?否根据t选择登录类型开始图4-1登录函数流程void main() void sign_ln();sign_ln();/* *登录函数*/void sign_ln()int t;void bos(); /申明管理员登录 void user(); /申明持卡人登录while(1) printf(t请选择(0-2):nttt1 管理员登录 nttt2 会员登录 nttt0 退出n); printf(t*n); scanf(%d,&t); if(t2) printf(t对不起,您只能选择0-2n);continue;switch(t) case 1 :if(bospasswd() bos(); else printf(t*n); getch(); return; /管理员登录 break; case 2 : user();break; /持卡人登录 case 0 : return;break; /返回43 公共函数4.4.1 获取当前系统时间/*公共函数_获取时间*char xz22;void now(char x22) time_t t; struct tm *tp; t=time(NULL); tp=localtime(&t); sprintf(x,%d年%d月%d日%d:%d:%d,tp- tm_year+1900,tp- tm_mon+1,tp- tm_mday,tp- tm_hour,tp- tm_min,tp- tm_sec); 4.4.2管理员密码设置/*管理员密码设置*void pst(FILE *fp) char name20,passwd20,t120,t220; do printf(t请输入管理员帐号:(账户名最多允许20个字符)n); scanf(%s,t1); if(strlen(t1)20) printf(t对不起,账户名最多允许20个字符n);while(strlen(t1)20);strcpy(name,t1);do开始输入管理员帐号输入管理员密码帐号合法?否是密码合法?否是保存数据结束图4-2 管理员密码设置流程do printf(t请输入密码(密码最多允许20个字符):n); scanf(%s,t2); if(strlen(t2)20) printf(t对不起,密码最多允许20 个字符n);while(strlen(t2)20);printf(t请再次输入密码:n); scanf(%s,t1);if(strcmp(t2,t1)!=0) printf(t对不起,两次输入的密码不相同n);while(strcmp(t2,t1)!=0);strcpy(passwd,t2);fseek(fp,0,0);fprintf(fp,%20st%20stn,name,passwd);now(xz);fp=fopen(boslist.txt,a+);if(fp=NULL) fp=fopen(boslist.txt,w+);fseek(fp,0,2);fprintf(fp,t%s 密码设置 成功n,xz);printf(t密码设置成功!nt新账户名:%snt新密码:%sn,name,passwd);fclose(fp);4.3.3管理员密码核对/*管理员密码核对*int bospasswd()FILE *fp; char name20,passwd20,t121,t221; int t=0; void guanli(); fp=fopen(boslist_cs.txt,r+); / boslist_cs.txt用于存储管理员帐号和密码 if(fp=NULL) fp=fopen(boslist_cs.txt,w+); /第一次使用则建立bilist_cs文件,调用密码设置printf(t第一次使用,请您设置管理员账户n); pst(fp);fclose(fp);开始,打开文件文件打开成功?否录入帐号和密码输入帐号和密码密码正确?否是结束Return(1)密码连续错误3 次?是Return(0)否调用管理员密码设置函数图4-3 管理员密码核对流程return(1); fscanf(fp,%s%s,name,passwd); if(strcmp(name,0)=0|strcmp(passwd,0)=0) printf(t 管理员数据丢失,请您设置管理员账户n);pst(fp);fclose(fp);return(1);elsewhile(1)printf(t请输入管理员账户名:n);scanf(%s,t1);printf(t请输入密码n);scanf(%s,t2); if(strcmp(t1,name)!=0|strcmp(t2,passwd)!=0) fp=fopen(boslist.txt,a+); /boslist.txt用于存储管理员操作记录,此功能还未完成printf(t对不起,您的用户名或密码错误,请重新输入n);if(fp=NULL) fp=fopen(boslist.txt,w+);now(xz); fseek(fp,0,2);fprintf(fp,n%s 登录 密码错误n,xz);t+; if(t=3) fclose(fp);printf(t密码连续三次错误n!);return(0); else开始输入管理员密码密码合法?否是保存数据结束图4-4 帐户密码设置流程 now(xz);fp=fopen(boslist.txt,a+);if(fp=NULL) fp=fopen(boslist.txt,wb+); fseek(fp,0,2);fprintf(fp,n%s 登录 成功n,xz);fclose(fp);return(1);4.3.4账户密码设置/*账户密码设置* void ka_pass(ul i)char t20;do do printf(t请输入新密码(密码最多允许20个字符):n); scanf(%s,t); if(strlen(t)20) printf(n对不起,密码最多允许20个字符n); while(strlen(t)20); printf(t请再次输入密码:n); scanf(%s,&kai.pswd); if(strcmp(kai.pswd,t)!=0) printf(n对不起,两次输入的密码不相同n);while(strcmp(kai.pswd,t)!=0);printf(t密码设置成功,您的新密码是:%sn,t);4.3.5账户密码设置开始,传入帐号和密码输入帐号和密码密码正确?否是结束Return(1)密码连续错误3 次?是Return(0)否图4-5 账户密码核对流程/*账户密码核对*int card_sec(ul i) char t120;int t=1;while(1)printf(t请输入密码n);scanf(%s,&t1); if(strcmp(t1,kai.pswd)!=0) printf(t对不起,您的用户名或密码错误,请重新输入n);if(t=3) printf(t密码连续3次错误!点击任意键返回n); getch();return(0);t+;else return(1);输入身份证号号码正确?否是结束Return(1)Return(0)图4-6 身份证号核对流程开始,传入数据(卡号)4.3.6身份证号核对/*身份证核对*int ct_s(ul i)char sf20;printf(t请输入您的身份证号码n);scanf(%s,sf);if (strcmp(sf,kai.idd)!=0)printf(t您输入的身份证号码错误,请输入任意键返回n);getch();return(0);else return(1);44 管理员相关模块显示第二层菜单输入t,t=04?否开始图4-7管理员主界面程图t=0?结束(返回)是是否根据t调用相关函数4.4.1管理员主界面 管理员主界面即第二层菜单,主要负责管理相关功能选择,程序如下:/*管理员主界面*void bos() FILE *fp; int t; void cardmake(); /制作 void cardlive(); /签发 void cardgl(); /管理 while(1) do printf(t*n); printf(t请您选择所需操作n); printf(ttt1 购物卡制作!n); printf(ttt2 购物卡签发!n); printf(ttt3 购物卡管理!n); printf(ttt4 管理员帐号和密码修改n); printf(ttt0 返回n); printf(t*n); scanf(%d,&t); if(t4) printf(t对不起,您只能选择0-4!n); while(t4); switch(t) case 0 : return; break; /返回 case 1 : cardmake(); break; /制卡 case 2 : cardlive(); break; /激活 case 3 : cardgl(); break; /卡管理 case 4 : fp=fopen(boslist_cs.txt,r+); pst(fp); fclose(fp); break; /密码修改 4.4.2购物卡制作/*购物卡制作*void cardmake() char cdname20;ul i;ul N; /购物卡总数ul n; /购物卡制作数ul sy; /未注册购物卡数gfp=fopen(cardlist_num.txt,r+); / cardlist_num.txt用于存购物卡总数和剩余数if(gfp=NULL) gfp=fopen(cardlist_num.txt,w+);N=0;sy=0;fscanf(gfp,%lu%lu,&N,&sy);do printf(t请输入您要制作的购物卡数目(0返回):n);scanf(%ld,&n);if(n0) printf(n对不起,您只能输入正整数n);开始从文件录入原有购物卡总数和剩余数输入需要制作的购物卡数码数目合法?否是写入新购物卡数目,写入初始信息,生成购物卡对应文件保存信息,关闭文件结束图4-8 购物卡制作流程if(n=0)fclose(gfp);return;while(n0);fseek(gfp,0,0);fprintf(gfp,%lut%lu,N+n,sy+n);fclose(gfp);gfp=fopen(cardlist.txt,a);if(gfp=NULL) gfp=fopen(cardlist.txt,w+);fseek(gfp,0,2);for(i=0;i0?否显示剩卡不知,返回是输入用户名,身份证号等信息调用密码设置保存信息,关闭文件结束图4-9 购物卡签发流程printf(t对不起,没有新卡n);fclose(gfp);return;fseek(gfp,0,0);fprintf(gfp,%lut%lut,n,sy-1);fclose(gfp);gfp=fopen(cardlist.txt,r+);if(!ka) printf(t打开文件失败n);fclose(gfp); getch();exit(0);for(i=0;in;i+) fscanf(gfp,%u %s %s %u %s %lu %u %d %c,&kai.cardid,&,&kai.idd,&kai.account,&kai.pswd,&kai.money,&kai.jifen,&kai.zhuangtai,&kai.cc); i=n-sy;kai.account=kai.cardid;printf(t请输入您的用户名n);scanf(%s,&); ka_pass(i);doprintf(t请输入您的身份证号码n); scanf(%s,&kai.idd);if(strlen(kai.idd)!=18) printf(t对不起,身份证号是18位n);while(strlen(kai.idd)!=18); kai.money=5000; /初始金额为50kai.jifen=0;kai.zhuangtai=1;sprintf(cdname,%lu.txt,i+1);cfp=fopen(cdname,a);if(cfp=NULL) cfp=fopen(cdname, w+);now(xz);fseek(cfp,0,2);fprintf(cfp,1n%s 开户 %lu 0 %lu 0 0 0 管理中心 cn,xz,kai.money,kai.money); printf(t购物卡注册成功!n); printf(t您的用户名为:%snt帐号为:%unt卡内余额为:50元n,,kai.account);fseek(gfp,0,0);for(i=0;in;i+) fprintf(gfp,%u %s %s %u %s %ld %u %d cn,kai.cardid,,kai.idd,kai.account,kai.pswd,kai.money,kai.jifen,kai.zhuangtai); fclose(cfp); fclose(gfp);return;开始密码正确?核对密码(调用帐号密码核对函数)输入要注销卡号i否是卡内余额=0?是设置卡i的状态为注销提示不允许注销否图4-10 购物卡注销流程返回4.4.4 购物卡注销/*卡注销*void zhuxiao(ul N) ul m; int x;ul i;float qian;printf(t请输入您要注销的卡号n);scanf(%u,&m);if(mN)printf(t对不起,没此卡号n);return;qian=(float)kam-1.money/100;x=card_sec(m-1);if(x=1) if(qian!=0) printf(t卡内还剩%7.2f元钱,请到消费界面进行退款操作后再注销n,qian); return;printf(%7.2f,qian); printf(t您是否真的要注销此帐号?(若不是请按0返回)n);scanf(%d,&x);if(x!=0) fseek(gfp,0,0);kam-1.zhuangtai=3;for(i=0;iN;i+) fprintf(gfp,%u %s %s %u %s %ld %u %d %cn,kai.cardid,,kai.idd,kai.account,kai.pswd,kai.money,kai.jifen,kai.zhuangtai,kai.cc); return;else return;else return;4.4.5 购物卡信息查看/*卡信息查看*void chakan(ul N) ul i; float ye; char zt20;printf( 卡号 持卡人姓名 关联帐号 余额 积分 状态n); for(i=0;iN;i+) switch(kai.zhuangtai) case 0 : strcpy(zt,未注册); break; case 1 : strcpy(zt,正常); break; case 2 : strcpy(zt,挂失); break; case 3 : strcpy(zt,已注销); break;ye=(float)kai.money/100;printf(%10u %14s %10u %10.2f %10u %10sn,kai.cardid,,kai.account,ye,kai.jifen,&zt); printf(t*n);4.4.6 购物卡查看与注销其实此函数主要用于选择购物卡查看和注销功能,其实此函数完全没有必要,查看和注销、存放在二级菜单更合理一些。这是设计时没有安排好,由于经验不足,时间仓储,来不及调整了。/*购物卡查看和注销*void cardgl() 开始,打开文件,载入数据显示第三层菜单输入m,m=02?否m=0?关闭文件,返回根据m调用相关函数否是是图4-11 购物卡查看与注销流程 ul N; ul sy; int m=1; ul i; int x; gfp=fopen(cardlist_num.txt,r+); if(gfp=NULL) printf(t打开文件错误n);exit(0); fscanf(gfp,%lu%lu,&N,&sy);fclose(gfp);gfp=fopen(cardlist.txt,r+);fseek(gfp,0,0);for(i=0;i余额?否显示余额不足是消费成功,计算并更新余额,积分等数据写入消费记录图4-12 消费流程if(kas.zhuangtai=2) printf(t此卡已被挂失,如果不是您的卡请立即上交管理中心n);now(xz);fseek(cfp,0,2);fprintf(cfp,n%s %lu 0 0 网关 0 0 %u 非正常使用 cn,xz,kas.money,kas.jifen);getch();return;while(1) printf(t请输入你要消费的金额n); scanf(%f,&q); if(q0) printf(t输入错误! n);else break;h=q*100;if(kas.moneyh)printf(t您的余额不足,请先充值n);getch();return;kas.money=kas.money-h;kas.jifen=kas.jifen+h/100;x=(float)kas.money/100;jd=h/100;h=q;printf(t消费成功!nt您此次花费%7.2f元,卡内余额为额%7.2f元,获得积分%dn,q,x,h);if(kas.money0?是充值成功,计算并更新余额等信息写入充值记录返回否提示错误图4-13 充值流程now(xz);fprintf(cfp,n%s 消费 0 %lu %lu %u 0 %u 超市 cn,xz,100*q,kas.money,jd,kas.jifen);4.5.2 充值/*充值*void czh(ul s)int t; float q; unsigned long h; float x; t=bospasswd();if(t=0) return;while(1) printf(t请输入金额n); scanf(%f,&q); if(q0) printf(t输入错误! n);else break;h=q*100;kas.money=kas.money+h;x=(float)kas.money/100;printf(t充值成功!nt您此次充值%7.2f元,卡内余额为额%7.2f元n,q,x);fseek(cfp,0,0);fprintf(cfp,%lu,wn+1);fseek(cfp,0,2);now(xz);fprintf(cfp,n%s 充值 %lu 0 %lu 0 0 %u 充值处 cn,xz,h,kas.money,kas.jifen);4.5.3 总记录查询(此功能未完成)/*总消费记录查询*/此功能未设计完成,不能启用void zjl(ul r) ul i;float mh,mi,mo; printf(“此功能还未建设完成,敬请期待 !”);return;printf( 时间 项目 收入 支出 余额 积分收入 剩余积分 网关n); for(i=0;ir;i+) mh=(float) zhi.money_have/100;mi=(float) zhi.money_in/100;mo=(float) zhi.jifen_out/100;printf(%10s %4s %6.2f %6.2f %6.2f %6u %6u %6sn,zhi.atime,zhi.xmu,mi,mo,mh,zhi.jifen_in,zhi.jifen,zhi.didian);printf(t点击任意键继续n);getch();4.5.4 消费记录查询(此功能未完成)/*消费记录查询*/此功能未设计完成,不能启用void xfjl(ul r) ul i;float mh,mi,mo; printf(“此功能还未建设完成,敬请期待!”);return;printf( 时间 收入 支出 余额 积分收入 剩余积分 网关n); for(i=0;ir;i+) mh=(float) zhi.money_have/100;mi=(float) zhi.money_in/100;mo=(float)zhi.jifen_out/100;if(strcmp(zhi.xmu,消费)=0)printf(%10s %6.2f %6.2f %6.2f %6u %6u %6sn,zhi.atime,mi,mo,mh,zhi.jifen_in,zhi.jifen,zhi.didian);printf(t点击任意键继续n);getch();4.5.5 充值记录查询(此功能未完成)/*充值记录查询*/此功能未设计完成,不能启用void czjl(ul r) ul i; float mh,mi,mo; printf(“此功能还未建设完成,敬请期待!”);return; printf( 时间 收入 支出 余额 积分收入 剩余积分 网关n);for(i=0;ir;i+)mh=(float) zhi.money_have/1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论