c语言程序设计小学期.docx
- 文档编号:29418215
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:31
- 大小:26.83KB
c语言程序设计小学期.docx
《c语言程序设计小学期.docx》由会员分享,可在线阅读,更多相关《c语言程序设计小学期.docx(31页珍藏版)》请在冰豆网上搜索。
c语言程序设计小学期
一设计思想
首先,用函数实现会员系统所能执行的的各项操作的入口;其次,给定函数设定对应的操作步骤的选择及其对应各项操作,制定相应的函数,其中要明确“会员所对应的各种数据的存放”用的是“某种结构体统一存放”,则修改中某个会员的一项或多项数据的方法的基本思想是:
逐步找到该结构体所对应的那一项,在不同的操作中修改例如“会员续费”,并回到系统主页,继续执行下一项操作,即切换下一项操,作为另一个函数,如此重复;结构体的引用和调用,指的是在函数中用地址引用该结构体的内容,即要求将会员的各项信息存入该结构体中,而且执行格对应数据字符的输入、更改、储存。
对会员的统计功能,则应顺着按照每个会员的信息用起泡法排序,然后最后一行统计各项总额;最后,利用函数,把总的信息储存在电脑的某个位置,以便以后进行修改和调用
二系统完成功能及框图
系统完成功能:
用户按题目要求输入一个距阵表示该会员计费系统,通过该系统进行各项操作。
结束
图1系统功能框图
三核心算法及说明
2.会员信息的录入
voidadd_data()
{
structmembermem;
intb,year,tel,cost,left;
charname;
staticinti=1;
while
(1)
{
srand((int)time(0));/*系统时间为种子*/
mem[i].No=rand()%100;/*随机数*/
printf("新注册会员卡号为%d",mem[i].No);
printf("\t\t\t请输入新会员个人信息\n");
printf("\t姓名\t生日\t电话\n");
scanf("%s%d%d",dd.mem[i].name,&year,&tel);
dd.mem[i].tel=tel;
dd.mem[i].year=year;
dd.mem[i].cost=0;
dd.mem[i].left=0;
dd.count++;
printf("\t\t\t此次录入已完成。
");
printf("\t\t\t继续添加会员信息[1-yes0-no]:
");
scanf("%d",&b);
if(b==0)break;
elsei++;
}
save_data();
}
3.会员资料的修改
voidedit_data()
{
structmembermem;
inti,No,year;
longinttel;
charname[50];
printf("\t\t\t请输入要编辑会员的卡号:
");
scanf("%d",&No);
for(i=0;i<=dd.count;i++)
{
if(strcmp(dd.mem[i].No,No)==0)
{
printf("已找到此人,原始记录为:
");
printf("\t\t\t该会员卡号,姓名,电话,生日,消费金额,剩余金额");
printf("%d\t%s\t%d\t%d\t%d\t%d\n",dd.mem[i].No,dd.mem[i].name,dd.mem[i].tel,
dd.mem[i].cost,dd.mem[i].left);
printf("\t\t\t重新编辑会员数据:
");
printf("\t\t\t会员姓名,电话,生日");
printf("\t\t\t--------------------------------------------------------------------\n");
scanf("%s",name);
scanf("%d",&year);
scanf("%d",&tel);
strcpy(dd.mem[i].name,name);
dd.mem[i].tel=tel;
dd.mem[i].year=year;
save_data();
printf("\n\n编辑会员记录(卡号-%s)成功!
",No);
}
else
printf("\t\t\t没有找到该会员(卡号-%s)!
",No);
}
}
四界面设计
五结论
本次程序设计是由二人共同完成,经历了从选择题目,整体分析,画流程图,设计模板,自己编写程序,上网查找标准代码,完善所编程序到调试程序的过程,其中我们有共同合作的欢乐,也有分工进行编写程序的喜悦,我们分工编写不同的函数,再将各自所编程序组成整体,在我们将程序进行整体组合时发现我们的程序无法自行输入矩阵,通过我们的共同研究,找到了我们所编程序的不妥之处,并进行了改进,编写程序的过程真是一个幸福的过程,让我找回了在编程道路上曾经失去的信心,让我感受到了伟大的团结力量。
参考资料
严蔚敏吴伟民,《数据结构(C语言版)》,清华大学出版社,2007.9
潭浩强,《C语言程序设计(第二版)》,高等教育出版社,2002.4
附录
程序代码如下:
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
typedefunsignedcharBYTE;
typedefstructtagFILETYPE/*自定义的数据库格式*/
{
BYTEFlag[4];/*标志,我的是"QDB\0"*/
longrCount;/*记录数*/
longrLen;/*每个记录长度*/
BYTEfPass;/*密码标志*/
BYTEPass[8];/*密码*/
BYTErev1;
BYTEAdPass[8];/*超级密码*/
BYTErev[98];/*保留作为以后扩展*/
}FILETYPE;
typedefstructtagCONTACTS/*会员结构*/
{
BYTEID[18];/*身份证号码*/
BYTErev1;/*保留字节,恒为零,作身份证号码的结尾*/
BYTECard[10];/*会员卡号*/
BYTErev2;/*保留字节,恒为零,作会员卡号码的结尾*/
BYTEName[10];/*姓名*/
BYTErev3;/*保留字节,恒为零,作姓名的结尾*/
BYTETel_Mobile[11];/*手机号码*/
BYTErev4;/*保留字节,恒为零,作手机号码的结尾*/
floatMoney;/*帐户余额*/
floatResult;/*消费累计*/
BYTELevel;/*会员等级,1以上表示VIP*/
}CONTACTS;
typedefstructtagRECORD/*数据记录双链表*/
{
CONTACTS*Data;/*当前数据管家*/
structtagRECORD*prev;/*上一数据记录*/
structtagRECORD*next;/*下一数据记录*/
}RECORD;
voidAddRecord(CONTACTS*nCon);/*添加记录*/
voidDelRecord(RECORD*nCon);/*删除记录*/
RECORD*FindFromCard(BYTE*Card);/*根据卡号查找,其他查找自己做*/
RECORD*FindFromID(BYTE*ID);/*根据身份证查找,其他查找自己做*/
intLoadData(char*FileName);/*从文件读取数据*/
intSaveData(char*FileName);/*保存数据到文件*/
intWriteCard(char*code,char*pass);/*写卡*/
intReadCard(char*code,char*pass);/*读卡*/
voidSafeClose();/*结束前清理*/
intInitSys();/*初始化系统*/
voidNewReg();/*会员登记*/
voidModify();/*会员修改*/
voidMoreMoney();/*会员续费*/
voidLoss();/*会员挂失*/
voidQuit();/*会员退会*/
voidStatistics(intm);/*消费统计*/
voidConsume();/*消费结帐*/
voidShowInfo(RECORD*rec);/*显示单个记录信息*/
intSelectYN(char*Info);/*Yes/No选择*/
intGetStr(char*p,intlen,intpFlag);/*输入字串,pFlag=1时*号显示*/
floatGetNum();/*输入浮点数*/
voidSort(intn);/*排序,自己写*/
RECORD*First=NULL;/*创建记录首指针*/
RECORD*Tail=NULL;/*创建记录尾指针*/
FILETYPEfHead;/*数据库文件头*/
charfName[100];/*数据库文件名*/
voidmain()
{
intsKey=0;/*菜单项目*/
intRUN=1;/*退出标志*/
intrMenu=1;/*菜单刷新标志*/
if(InitSys())
{
printf("\n\n初始化失败...\n\n");
return;
}
while(RUN)
{
if(rMenu)
{
system("CLS");
printf("\n");
printf("\n1.会员登记.");
printf("\n2.会员修改.");
printf("\n3.会员续费.");
printf("\n4.会员挂失.");
printf("\n5.会员退会.");
printf("\n6.消费结帐.");
printf("\n7.消费统计.");
printf("\n8.缴费统计.");
printf("\n\n
printf("\n\n请选择功能项.");
rMenu=0;
}
sKey=getch();
if(sKey>='1'&&sKey<='8')rMenu=1;
switch(sKey)
{
case'1':
NewReg();break;
case'2':
Modify();break;
case'3':
MoreMoney();break;
case'4':
Loss();break;
case'5':
Quit();break;
case'6':
Consume();break;
case'7':
Statistics
(1);break;
case'8':
Statistics
(2);break;
case27:
RUN=0;break;
default:
break;
}
}
SafeClose();
}
intInitSys()/*初始化系统*/
{
intCheck=0;
charOnCreate=0;
intotherstate=0;
memcpy(fName,"MyDat.QDB\0",sizeof("MyDat.QDB\0"));
memset(&fHead,0,sizeof(FILETYPE));
Check=LoadData(fName);
if(Check==2)
{
printf("\n\n会员数据库不存在!
");
OnCreate=SelectYN("是否创建新数据库?
");
if(OnCreate)
{
memset(&fHead,0,sizeof(FILETYPE));
memcpy(&fHead.Flag,"QDB\0",4);
fHead.rLen=sizeof(CONTACTS);
printf("\n\n请输入密码:
");
if(GetStr((char*)fHead.Pass,8,1))
{
srand((unsignedint)time(0));
fHead.fPass=rand()%250+1;
}
otherstate=SaveData(fName);
if(otherstate==2)printf("\n\n磁盘写保护");
returnotherstate;
}
}
returnCheck;
}
voidNewReg()/*会员登记*/
{
CONTACTStmp;
intselect=0;
charCardCode[10]={0};
charCardPass[8]={0};
system("cls");
memset(&tmp,0,sizeof(CONTACTS));
printf("\n\n姓名:
");
GetStr((char*)tmp.Name,10,0);
printf("\n\n身份证号:
");
GetStr((char*)tmp.ID,18,0);
printf("\n\n手机号码:
");
GetStr((char*)tmp.Tel_Mobile,11,0);
printf("\n\n存入金额:
");
tmp.Money=GetNum();
if(SelectYN("确认注册?
"))
{
printf("\n\n卡号:
");
GetStr(CardCode,10,0);
printf("\n\n卡密码:
");
GetStr(CardPass,8,1);
if(WriteCard(CardCode,CardPass))
{
printf("\n\n写卡成功!
");
memcpy(tmp.Card,CardCode,10);
tmp.rev1=tmp.rev2=tmp.rev3=tmp.rev4=0;
AddRecord(&tmp);
SaveData(fName);
}
}
}
voidModify()/*会员修改*/
{
RECORD*pCur=First;
charmName[10]={0};
charmId[18]={0};
charmTel[11]={0};
while(pCur)
{
ShowInfo(pCur);
if(SelectYN("是否修改当前记录?
"))
{
printf("\n\n姓名:
");
if(GetStr((char*)mName,10,0))memcpy(pCur->Data->Name,mName,10);
printf("\n\n身份证号:
");
if(GetStr((char*)mId,18,0))memcpy(pCur->Data->ID,mId,18);
printf("\n\n手机号码:
");
if(GetStr((char*)mTel,11,0))memcpy(pCur->Data->Tel_Mobile,mTel,11);
SaveData(fName);
printf("\n\n信息更新完成!
");
}
pCur=pCur->next;
if(pCur)printf("\n\n\n按
elseprintf("\n\n\n数据检索完成,按任意键返回...");
if(getch()==27)break;
}
}
voidMoreMoney()/*会员续费*/
{
RECORD*pCur=NULL;
charCardCode[10]={0};
charCardPass[8]={0};
charinPass[8]={0};
system("cls");
printf("\n\n卡号:
");
GetStr(CardCode,10,0);
printf("\n\n请输入密码:
");
GetStr(inPass,8,1);
if(WriteCard(CardCode,CardPass))
{
printf("\n\n写卡成功!
");
pCur=FindFromCard((BYTE*)CardCode);
if(pCur==NULL)printf("\n\n该卡未注册给任何用户!
");
else
{
ShowInfo(pCur);
printf("\n\n--------------------------------------------");
printf("\n\n存入金额:
");
pCur->Data->Money+=GetNum();
SaveData(fName);
printf("\n\n续费手续完成.该会员现在帐户余额为:
%.2f",pCur->Data->Money);
}
}
printf("\n\n按任意键返回...");
getch();
}
voidLoss()/*会员挂失*/
{
RECORD*pCur=NULL;
char*id[18]={0};
charCardCode[10]={0};
charCardPass[8]={0};
system("cls");
printf("\n\n请输入身份证号:
");
GetStr((char*)id,18,0);
pCur=FindFromID((BYTE*)id);
if(pCur==NULL)printf("\n\n该身份证没有注册会员!
");
else
{
ShowInfo(pCur);
if(SelectYN("确定更换新卡?
"))
{
printf("\n\n新卡号:
");
GetStr(CardCode,10,0);
printf("\n\n卡密码:
");
GetStr(CardPass,8,1);
if(WriteCard(CardCode,CardPass))
{
printf("\n\n写卡成功!
");
memcpy(pCur->Data->Card,CardCode,10);
SaveData(fName);
printf("\n\n信息更新完成!
");
}
}
}
printf("\n\n按任意键返回...");
getch();
}
voidQuit()/*会员退会*/
{
RECORD*pCur=NULL;
char*id[18]={0};
system("cls");
printf("\n\n请输入身份证号:
");
GetStr((char*)id,18,0);
pCur=FindFromID((BYTE*)id);
if(pCur==NULL)printf("\n\n该身份证没有注册会员!
");
else
{
ShowInfo(pCur);
if(SelectYN("确定注销此会员?
"))
{
DelRecord(pCur);
SaveData(fName);
printf("\n\n会员注销手续完成.");
}
}
printf("\n\n按任意键返回...");
getch();
}
voidConsume()/*消费结帐*/
{
RECORD*pCur=NULL;
charCardCode[10]={0};
charCardPass[8]={0};
charinPass[8]={0};
floatcMoney=0;
system("cls");
printf("\n\n卡号:
");
GetStr(CardCode,10,0);
printf("\n\n请输入密码:
");
GetStr(inPass,8,1);
if(WriteCard(CardCode,CardPass))
{
printf("\n\n写卡成功!
");
pCur=FindFromCard((BYTE*)CardCode);
if(pCur==NULL)printf("\n\n该卡未注册给任何用户!
");
else
{
ShowInfo(pCur);
printf("\n\n--------------------------------------------");
printf("\n\n消费金额:
");
cMoney=GetNum();
if(cMoney==0)printf("\n\n此次消费0.00元,划扣0.00元");
else
{
if(pCur->Data->Level)cMoney*=(float)0.9;
printf("\n\n须扣金额:
%.2f",cMoney);
if(pCur->Data->Money else { pCur->Data->Money-=cMoney; pCur->Data->Result+=cMoney; if(pCur->Data->Result>=1000)pCur->Data->Level=1; SaveData(fName); printf("\n\n此次消费共%.2f元.该会员现在帐户余额为: %.2f",cMoney,pCur->Data->Money); } } } } printf("\n\n按任意键返回..."); getch(); } voidStatistics(intm)/*消费统计*/ { RECORD*pCur=First; char*p[2]={"普通\0","VIP\0"}; longcount=0; inttFlag=1; floatsIn=0; floatsOut=0; intsPages
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 小学
![提示](https://static.bdocx.com/images/bang_tan.gif)