数据结构课程设计报告书Word文档格式.doc
- 文档编号:808916
- 上传时间:2023-04-29
- 格式:DOC
- 页数:31
- 大小:397.50KB
数据结构课程设计报告书Word文档格式.doc
《数据结构课程设计报告书Word文档格式.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告书Word文档格式.doc(31页珍藏版)》请在冰点文库上搜索。
//定义结构体指针数组
intcountRecord;
voidPrintTitle();
voidPrintDormitory(dormitory);
voidRead();
voidWrite();
voidView();
voidAdd();
voidDelete();
voidEdit();
voidFind(int);
voidSortWithDormID();
voidSortWithStudentID();
voidSortWithName();
voidSearchWithDormID(char*);
voidSearchWithStudentID(char*);
voidSearchWithName(char*);
voidmain()
intchoice=0;
countRecord=0;
headDormitory=NULL;
do
{
system("
cls"
);
printf("
-----------主菜单-----------\n"
----------------------------\n\n"
-----1.从文件中读出数据----\n"
-----2.显示住宿信息--------\n"
-----3.添加信息------------\n"
-----4.修改信息------------\n"
-----5.删除信息------------\n"
-----6.按姓名查找信息------\n"
-----7.按学号查找信息------\n"
-----8.按宿舍号查找信息----\n"
-----9.将数据写入文件------\n"
-----0.退出----------------\n"
请选择:
"
scanf("
%d"
&
choice);
switch(choice)
{
case1:
Read();
break;
//读入文件
case2:
View();
//显示全部住宿信息
case3:
Add();
//增加住宿信息
case4:
Edit();
//修改住宿信息
case5:
Delete();
//删除一条住宿信息
case6:
Find
(1);
//根据姓名查找
case7:
Find
(2);
//根据学号查找
case8:
Find(3);
break;
//根据住宿号查找
case9:
Write();
//写入文件;
case0:
//退出系统;
default:
printf("
选择选项:
}
}while(choice!
=0);
}
voidPrintTitle()//输出住宿信息之前输出住宿信息的表头
printf("
----------------\n"
宿舍号学号名字\n"
voidPrintDormitory(dormitoryp)//输出结点p所表示的信息
%10s"
p.dormID);
|%10s"
p.studentID);
|%10s\n"
p.Name);
voidRead()//读入文件,把事先保存的住宿信息读入到文件当中,创建单链表,把链表结点的地址保持到指针数组中
FILE*fp;
p_node_dormitorypNodeDormitory;
intsize;
countRecord=0;
fp=fopen(DATA_FILE,"
rb"
fseek(fp,0,2);
size=ftell(fp);
rewind(fp);
while(size!
=0)
size-=sizeof(structdormitory);
pNodeDormitory=(p_node_dormitory)malloc(sizeof(node_dormitory));
if(fread(&
pNodeDormitory->
data,sizeof(structdormitory),1,fp)!
=1)
exit(0);
pNodeDormitory->
next=headDormitory;
headDormitory=pNodeDormitory;
arrayDormID[countRecord]=&
headDormitory->
data;
arrayStudentID[countRecord]=&
arrayName[countRecord]=&
countRecord++;
fclose(fp);
SortWithDormID();
SortWithStudentID();
SortWithName();
读入%d条宿舍信息到内存中!
\n"
countRecord);
getch();
voidWrite()//将修改后的信息数据写入文件
FILE*fp;
intcount=0;
if((fp=fopen(DATA_FILE,"
wb+"
))==NULL)
打不开文件!
return;
}
pNodeDormitory=headDormitory;
while(pNodeDormitory!
=NULL)
if(fwrite(&
data,sizeof(dormitory),1,fp)!
文件写入错误!
pNodeDormitory=pNodeDormitory->
next;
count++;
fclose(fp);
写入%d条宿舍信息!
count);
getch();
voidView()//显示住宿信息,把数据中所有链表信息显示出来
intcount;
pNodeDormitory=headDormitory;
count=0;
PrintTitle();
PrintDormitory(pNodeDormitory->
data);
总共%d间宿舍\n"
\n按姓名排序\n"
for(count=0;
count<
countRecord;
count++)
PrintDormitory(*arrayName[count]);
\n按学号排序\n"
for(count=0;
PrintDormitory(*arrayStudentID[count]);
\n按宿舍号排序\n"
PrintDormitory(*arrayDormID[count]);
voidAdd()//添加信息,在表头插入一个新的结点,并把该结点的地址分别添加到宿舍、
//学号、姓名指针数组的末尾,然后把这三个数组分别排序
inti,j,k;
pNodeDormitory=(p_node_dormitory)malloc(sizeof(node_dormitory));
\n宿舍号="
scanf("
%s"
pNodeDormitory->
data.dormID);
\n学号="
data.studentID);
\n姓名="
data.Name);
if(headDormitory==NULL)
headDormitory=pNodeDormitory;
pNodeDormitory->
next=NULL;
else
headDormitory=pNodeDormitory;
}//添加一条记录后重新排序住宿号指针数组
for(i=0;
i<
countRecord;
i++)
{
if(strcmp(arrayDormID[i]->
dormID,&
data.dormID)>
0)
break;
for(j=countRecord;
j>
i;
j--)
arrayDormID[j]=arrayDormID[j-1];
arrayDormID[i]=&
//添加一条记录后重新排序学号指针数组
for(i=0;
if(strcmp(arrayStudentID[i]->
studentID,&
data.studentID)>
0)
break;
}
for(j=countRecord;
arrayStudentID[j]=arrayStudentID[j-1];
arrayStudentID[i]=&
//添加一条记录后重新排序姓名指针数组
for(i=0;
{
if(strcmp(arrayName[i]->
Name,&
data.Name)>
break;
}
arrayName[j]=arrayName[j-1];
arrayName[i]=&
countRecord++;
PrintTitle();
PrintDormitory(pNodeDormitory->
getch();
voidDelete()//删除结点,根据学号查找要删除的结点并删除,同时把三个指针数组中与该结点相关的指针域置空
p_node_dormitorypNodeDormitory,p1;
charsID[10];
inti,j;
p1=headDormitory;
\n输入你要删除的学号"
\n学号="
sID);
if(strcmp(p1->
data.studentID,sID)==0)
headDormitory=p1->
pNodeDormitory=p1;
{pNodeDormitory=p1->
if(strcmp(pNodeDormitory->
p1->
next=pNodeDormitory->
break;
}
p1=pNodeDormitory;
if(pNodeDormitory)
//删除一条记录后重新排序住宿号指针数组
for(i=0;
if(arrayDormID[i]==&
data)
break;
for(j=i;
j<
countRecord-1;
j++)
arrayDormID[j]=arrayDormID[j+1];
//删除一条记录后重新排序学号指针数组
if(arrayStudentID[i]==&
break;
for(j=i;
arrayStudentID[j]=arrayStudentID[j+1];
//删除一条记录后重新排序姓名指针数组
if(arrayName[i]==&
arrayName[j]=arrayName[j+1];
free(pNodeDormitory);
countRecord--;
\n一条信息已经被删除!
else
printf("
\没有匹配的信息!
getch();
voidEdit()//修改住宿信息结点,首先根据学号找到指针域,然后修改该结点的数据域
\n输入你想要修改的学号:
\nStudentID="
PrintTitle();
PrintDormitory(pNodeDormitory->
printf("
\n新的宿舍号="
scanf("
\n新的学号="
\n新的名字="
%S"
\n\n\n"
\n一天信息已经被修改!
getch();
return;
\n没有匹配信息!
voidSortWithDormID()
dormitory*tmp;
k=i;
for(j=i+1;
if(strcmp(arrayDormID[j]->
dormID,arrayDormID[k]->
dormID)<
k=j;
if(k!
=i)
tmp=arrayDormID[i];
arrayDormID[i]=arrayDormID[k];
arrayDormID[k]=tmp;
}
voidSortWithStudentID()
{
inti,j,k;
dormitory*tmp;
for(i=0;
{
k=i;
for(j=i+1;
if(strcmp(arrayStudentID[j]->
studentID,arrayStudentID[k]->
studentID)<
k=j;
if(k!
{
tmp=arrayStudentID[i];
arrayStudentID[i]=arrayStudentID[k];
arrayStudentID[k]=tmp;
}
}
voidSortWithName()
if(strcmp(arrayName[j]->
Name,arrayName[k]->
Name)<
if(k!
tmp=arrayName[i];
arrayName[i]=arrayName[k];
arrayName[k]=tmp;
voidFind(inttype)//选择查找方式
charkey[10];
printf("
\n输入你要查找的关键字"
\nkey="
scanf("
key);
switch(type)
case1:
SearchWithName(key);
case2:
SearchWithStudentID(key);
case3:
SearchWithDormID(key);
voidSearchWithName(char*key)//采用二分法根据姓名查找函数
intlow,high,mid,i,matchCount;
//matchCount为匹配记录数目
low=0;
high=countRecord-1;
matchCount=0;
while(low<
=high)
mid=(low+high)/2;
if(strcmp(arrayName[mid]->
Name,key)==0);
{PrintTitle();
i=mid-1;
while(i>
=low)
if(strcmp(arrayName[i]->
Name,key)==0)
i--;
else
break;
low=i+1;
//low此时为匹配的第一条记录下标
i=mid;
while(i<
{
if(strcmp(arrayName[i]->
i++;
else
break;
high=i-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告书