动态顺序表下标法.docx
《动态顺序表下标法.docx》由会员分享,可在线阅读,更多相关《动态顺序表下标法.docx(68页珍藏版)》请在冰豆网上搜索。
动态顺序表下标法
动态顺序表(下标法)
/*说明:
不同类型的结构在定义和存盘及装载时算法不同*/
#include
#include
#include
#defineMAX4
#defineMAXIN2
/*结构定义*/
typedefstructnode
{
charnumb[15];/*学生证号*/
charname[15];/*姓名*/
intage;/*年龄*/
charsex[2];/*性别*/
chartimf[4][12];/*缴费时间*/
floatyesf[4][5];/*四年学杂费*/
chartims[4][6];/*确定是否缴费*/
floatyzzf;/*四年总费*/
}Elemtype;
typedefstructlist
{
Elemtype*s;/*顺序表首地址*/
intlen;/*顺序表长度*/
intlistsize;/*顺序表容量*/
}SqList;
/*变量定义*/
SqListv;intk;
charchs,ch,sname[15];
/*函数说明*/
intmenu_select();/*主程序选择菜单*/
intmenu_delselect();/*删除选择菜单*/
intmenu_inselect();/*插入选择菜单*/
intmenu_findselect();/*查找选择菜单*/
voidmenu_prog(SqListv);/*主程序执行菜单*/
voidmenu_delprog(SqList*v);/*删除执行菜单*/
voidmenu_inprog(SqList*v);/*插入执行菜单*/
voidmenu_findprog(SqListv);/*查找执行菜单*/
voidplaypasword(char*s);/*密码采用*号表示*/
voidsetpasword();/*建立密码*/
voidmadpasword();/*修改密码*/
voidsave(SqListv);/*保存文件*/
voidload(SqList*v);/*装载文件*/
voidinilist(SqList*v);/*初始化*/
voidsetlist(SqList*v);/*建立动态顺序表*/
voidprintlist(SqListv);/*显示祥细数据算法*/
voidprintlists(SqListv);/*输出顺序表*/
voiddistroylist(SqList*v);/*消顺序表*/
voidinsert(SqList*v);/*插入数据*/
voidinserts(SqList*v);/*插入任意位置数据*/
voiddelnumb(SqList*v);/*删除编号*/
voiddelname(SqList*v);/*删除姓名*/
intfindnumb(SqListv);/*查找编号*/
intfindname(SqListv,charstrname[],intk);/*查找姓名*/
voidsortdata(SqList*v);/*数据排序*/
voidmadedata(SqList*v);/*修改数据*/
voidsortsdata(SqListv);/*数据统计*/
intflagint(charstrnum[]);/*判字串中是否均为数字*/
intflagints(charstrnum[]);/*判字串中是否为数字或小数点
*/
voidscandata(SqList*v,inti);/*输入缴费信息*/
main()
{/*主程序*/
FILE*fp;
charcha[20],chb[20];
inti=0;
fp=fopen("pasword.exe","rb");
if(fp==NULL)setpasword();
elsefclose(fp);
v.s=NULL;/*基址指针初值为空*/
clrscr();/*清屏*/
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("************************************
\n");
printf("**
\n");
printf("*数据结构课程设计实例*
\n");
printf("**
\n");
printf("*学生缴费管理系统*
\n");
printf("*(动态顺序表)*
\n");
printf("*(采用下标法)*
\n");
printf("**
\n");
printf("*作者:
孙俊杰*
\n");
printf("**
\n");
printf("*2008年1月1日*
\n");
printf("**
\n");
printf("*初始密码:
1234*
\n");
printf("**
\n");
printf("*数据库名:
ii.dat*
\n");
printf("**
\n");
printf("************************************
\n");
printf("\n");
printf("\n");
fp=fopen("pasword.exe","rb");
fgets(cha,81,fp);
printf("请输入密码:
");
playpasword(chb);
while(strcmp(cha,chb)<0||strcmp(cha,chb)>0)
{
i++;
if(i==3)
{
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("
************************************\n");
printf("*
*\n");
printf("*密码错误无权使用!
!
!
*\n");
printf("*
*\n");
printf("*谢谢
*\n");
printf("*
*\n");
printf("*
*\n");
printf("*如想使用本软件请与作者联系
*\n");
printf("*
*\n");
printf("*2007年1月1日
*\n");
printf("*
*\n");
printf("
************************************\n");
printf("\n");
printf("\n");
scanf("%*c");
exit(0);
}
printf("密码错误!
!
!
\n");
printf("请输入密码:
");
playpasword(chb);
}
menu_prog(v);
}
voidmenu_prog(SqListv)
{/*选项菜单执行系统*/
charch;
for(;;)
{
switch(menu_select())
{
case1:
if(v.s!
=NULL)
{
printf("\n系统中已经存在数据库!
不能新建立数据
库!
!
!
");
printf("\n请退出系统后重新操作!
!
!
");
printf("\n");
printf("按任意键继续.........");
getch();
break;
}
else{
inilist(&v);/*初始化顺序表算法*/
setlist(&v);/*建立顺序表算法*/
if(v.s!
=NULL&&v.len!
=0)printlist(v);/*输
出顺序表算法*/
elseif(v.len==0)
{
free(v.s);v.s=NULL;
}
printf("\n");
printf("按任意键继续.........");
getch();
break;
}
case2:
if(v.s==NULL)printf("请先建立顺序表后再进行操作!
");
else{
printf("是否输出祥细信息?
(y/n):
");
scanf("%c%*c",&ch);
if(ch=='y')printlist(v);/*显示祥细数据算法
*/
elseprintlists(v);/*显示数据算法*/
printf("\n");
}
printf("按任意键继续.........");
getch();
break;
case3:
if(v.s==NULL)printf("请先建立顺序表后再进行操作!
");
else{
menu_delprog(&v);/*调用删除窗口*/
}
printf("按任意键继续.........");
getch();
break;
case4:
if(v.s==NULL)printf("请先建立顺序表后再进行操作!
");
else{
menu_inprog(&v);/*调用插入窗口*/
}
printf("按任意键继续.........");
getch();
break;
case5:
if(v.s==NULL)printf("请先建立顺序表后再进行操作!
");
else{
menu_findprog(v);/*调用查找窗口*/
}
printf("按任意键继续.........");
getch();
break;
case6:
if(v.s==NULL)printf("请先建立顺序表后再进行操作!
");
else{
madedata(&v);/*修改算法*/
}
printf("按任意键继续.........");
getch();
break;
case7:
if(v.s==NULL)printf("请先建立顺序表后再进行操作!
");
else{
sortdata(&v);/*排序算法*/
}
printf("按任意键继续.........");
getch();
break;
case8:
if(v.s==NULL)printf("请先建立顺序表后再进行操作!
");
else{
sortsdata(v);/*统计算法*/
}
printf("按任意键继续.........");
getch();
break;
case9:
madpasword();/*修改密码*/
printf("按任意键继续.........");
getch();
break;
case10:
save(v);/*将程序中数据保存到磁盘文件中*/
printf("按任意键继续.........");
getch();
break;
case11:
if(v.s!
=NULL)
{
printf("\n系统中已经存在数据库!
不能打开新数据
库!
!
!
");
printf("\n请退出系统后重新操作!
!
!
");
printf("\n");
printf("按任意键继续.........");
getch();
break;
}
else{
inilist(&v);
load(&v);/*将磁盘文件内容装载到内存中*/
printf("按任意键继续.........");
getch();
break;
}
case12:
if(v.s!
=NULL)
{
printf("\n是否保存内存中的数据?
(y/n):
");
scanf("%c%*c",&ch);
if(ch=='y')save(v);/*将程序中数据保存到磁盘
文件中*/
distroylist(&v);
}
exit(0);
}
}
}
voidmenu_delprog(SqList*v)
{/*选项菜单执行系统*/
inti;
for(;;)
{
i=menu_delselect();
switch(i)
{
case1:
if(v->s==NULL)printf("请先建立顺序表后再进行操作!
");
else{
delnumb(v);/*删除编号算法*/
}
printf("按任意键继续.........");
getch();
break;
case2:
if(v->s==NULL)printf("请先建立顺序表后再进行操作!
");
else{
delname(v);/*删除姓名算法*/
}
printf("按任意键继续.........");
getch();
break;
case3:
break;
}
if(i==3)break;
}
}
voidmenu_inprog(SqList*v)
{/*选项菜单执行系统*/
inti;
for(;;)
{
i=menu_inselect();
switch(i)
{
case1:
if(v->s==NULL)printf("请先建立顺序表后再进行操作!
");
else{
insert(v);/*插入数据算法*/
}
printf("按任意键继续.........");
getch();
break;
case2:
if(v->s==NULL)printf("请先建立顺序表后再进行操作!
");
else{
inserts(v);/*插入数据算法*/
}
printf("按任意键继续.........");
getch();
break;
case3:
break;
}
if(i==3)break;
}
}
voidmenu_findprog(SqListv)
{/*选项菜单执行系统*/
inti;
for(;;)
{
i=menu_findselect();
switch(i)
{
case1:
if(v.s==NULL)printf("请先建立顺序表后再进行操作!
");
else{/*编号查找算法*/
ch='y';
while(ch=='y')
{
k=findnumb(v);
if(k!
=0)
{
printf("学生证号姓名年龄
性别第一学期第二学期第三学期第四学期缴费总计\n");
printf("%s%8s%6d%6s%9s%9s%9s%9s%
10.2f\n\n",v.s[k].numb,v.s[k].name,v.s[k].age,v.s[k].sex,v.s[k].tims
[0],v.s[k].tims[1],v.s[k].tims[2],v.s[k].tims[3],v.s[k].yzzf);
printf("收费项目:
学杂费
教材费住宿费总计缴费日期\n");
printf("第1学年:
%11.2f%11.2f%
11.2f%11.2f%15s\n",v.s[k].yesf[0][1],v.s[k].yesf[0][2],v.s[k].yesf[0]
[3],v.s[k].yesf[0][4],v.s[k].timf[0]);
printf("第2学年:
%11.2f%11.2f%
11.2f%11.2f%15s\n",v.s[k].yesf[1][1],v.s[k].yesf[1][2],v.s[k].yesf[1]
[3],v.s[k].yesf[1][4],v.s[k].timf[1]);
printf("第3学年:
%11.2f%11.2f%
11.2f%11.2f%15s\n",v.s[k].yesf[2][1],v.s[k].yesf[2][2],v.s[k].yesf[2]
[3],v.s[k].yesf[2][4],v.s[k].timf[2]);
printf("第4学年:
%11.2f%11.2f%
11.2f%11.2f%15s\n",v.s[k].yesf[3][1],v.s[k].yesf[3][2],v.s[k].yesf[3]
[3],v.s[k].yesf[3][4],v.s[k].timf[3]);
}
elseprintf("数据库中无此编号的数
据!
!
!
");
printf("\n是否重新查找另一个编号的记录?
(y/n):
");
scanf("%c%*c",&ch);
}
}
printf("按任意键继续.........");
getch();
break;
case2:
if(v.s==NULL)printf("请先建立顺序表后再进行操作!
");
else{/*姓名查找算法*/
printlists(v);
chs='y';ch='y';
while(chs=='y')
{
printf("请输入要查找记录的姓名:
");
gets(sname);
k=1;
while(ch=='y')
{
k=findname(v,sname,k);
if(k!
=0)
{
printf("学生证号姓名年龄
性别第一学期第二学期第三学期第四学期缴费总计\n");
printf("%s%8s%6d%6s%9s%9s%9s%9s%
10.2f\n\n",v.s[k].numb,v.s[k].name,v.s[k].age,v.s[k].sex,v.s[k].tims
[0],v.s[k].tims[1],v.s[k].tims[2],v.s[k].tims[3],v.s[k].yzzf);
printf("收费项目:
学杂费
教材费住宿费总计缴费日期\n");
printf("第1学年:
%11.2f%11.2f%
11.2f%11.2f%15s\n",v.s[k].yesf[0][1],v.s[k].yesf[0][2],v.s[k].yesf[0]
[3],v.s[k].yesf[0][4],v.s[k].timf[0]);
printf("第2学年:
%11.2f%11.2f%
11.2f%11.2f%15s\n",v.s[k].yesf[1][1],v.s[k].yesf[1][2],v.s[k].yesf[1]
[3],v.s[k].yesf[1][4],v.s[k].timf[1]);
printf("第3学年:
%11.2f%11.2f%
11.2f%11.2f%15s\n",v.s[k].yesf[2][1],v.s[k].yesf[2][2],v.s[k].yesf[2]
[3],v.s[k].yesf[2][4],v.s[k].timf[2]);
printf("第4学年:
%11.2f%11.2f%
11.2f%11.2f%15s\n",v.s[k].yesf[3][1],v.s[k].yesf[3][2],v.s[k].yesf[3]
[3],v.s[k].yesf[3][4],v.s[k].timf[3]);
printf("\n是否继续查找相同姓名的
记录?
(y/n):
");
scanf("%c%*c",&ch);
if(ch=='y')k++;
elsebreak;
}
else{
printf("查找结束或该数据库中无
此姓名的记录!
!
!
");
break;
}
}
printf("\n是否重新进行查找操作?
(y/n):
");
scanf("%c%*c",&chs);
}
}
printf("按任意键继续.........");
getch();
break;
case3:
break;
}
if(i==3)break;
}
}
intmenu_select()
{/*选项菜单系统*/
chars[8];
intc;
clrscr();/*清屏*/
printf("\n");
printf("\n");
printf("************************************
\n");
printf("**
\n");
printf("**
\n");
printf("*动态顺序表基本操作窗口*
\n");
printf("*(采用下标法)*
\n");
printf("**
\n");
printf("**
\n");
printf("************************************
\n");
printf("\n");
printf("01:
学生缴费系统的建立操作
\n");
printf("02:
学生缴费系统的显示操作
\n");
printf("03:
学生缴费系统的删除操作
\n");
printf("04:
学生缴费系统的插入操作
\n");