C语言课程设计报告8822207.docx
- 文档编号:5608529
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:26
- 大小:21.07KB
C语言课程设计报告8822207.docx
《C语言课程设计报告8822207.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告8822207.docx(26页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告8822207
C语言课程设计报告
题目:
学院
专业
年级班别
学号
学生姓名
指导教师
成绩
2009年12月
1.课程设计题目,内容,要求
设计一个《学生通讯录管理系统》,在动态链表程序的基础上,设计要求如下
(必须使用结构体和链表等数据结构)
1建立文件
存储文件使用指定文件名或默认文件名;
可以不保存输入记录,但需要确认是否保存输入记录
如果已有文件,只能在其后追加;
新增记录可以不存入原文件中,以可以用原来的文件覆盖内存的内容;
可以将多个个文件记录合并到一个文件中;
2文件的存取和显示
可以单独存取文件;
可以随时显示内存中记录的全部内容;
可以直接存取默认文件或指定文件;
3删除记录
可以按“姓名”或“电话”方式删除记录并更新内存链表内容;
能给出被删除的信息,输出没有找到的信息;
如果已经是空表,上出时应给出信息并返回主菜单;
如果没有要删除的信息,输出没有找到的信息;
删除操作仅限于内存,只有执行记录时,才能覆盖原记录;
4查询记录
可以按“姓名”或“电话”或“宿舍”方式查询记录
能给出查询记录的信息;
如果查询的信息不存在,输出没有找到的信息;
5整体功能
a可以随时检索、删除、或增加新记录,保存或取消新的记录
b使姓名可由16位字符和数字的混合编码组成
c使电话号码可由18位字符和数字组成
d将输出信息加上输出信息信息栏,例如
姓名电话性别年龄生日宿舍
李四1234男217月1日东二333
e使用菜单实现功能的正确的选择
f所有节点信息都是动态生成。
6测试程序
应列出测试大纲对程序进行测试;
应保证测试用例测试到程序的各种边缘情况
二.总体设计
系统包括的函数有
Main.c:
整个系统的主函数
Menu.c:
系统的主界面
Creat.c:
创建链表
Add.c:
追加记录
Del.c:
删除记录
Modify.c:
修改记录
Read.c:
从外部文件读取记录
Save.c:
保存记录到外部文件
Search.c:
查找记录
Skim.c:
浏览记录
Headyy.h:
头文件
系统功能模块结构图:
Main—menu—Creat.c
Add.c
Del.c
Modify.c
Read.c
Save.c
Search.c
Skim.c
三.详细设计
程序清单:
headyy.h
#ifndefNULL
#defineNULL0
#endif
#include
#include
#include
#include
#include
#defineLENsizeof(structaddbok)
#definePRprintf("%-12s%-12s%-12s%-10s%-10s%-10s%-12s\n","Num.","Name","Tel.","Sex","Age","Birtday","Dormitory");
structaddbok/*声明结构体类型*/
{longnum;
charnam[16];/*储存编号*/
chartel[18];/*储存电话*/
charsex[4];/*学生性别*/
intage;/*学生年龄*/
charbir[10];/*学生生日*/
chardor[13];/*学生宿舍*/
structaddbok*next;
};
voidprint(structaddbok*);
具体实现:
创建了结构体变量addbok
main.c
#include
externintn=0;
voidmain()
{intc,color,i=0;
structaddbok*head;
head=NULL;
for(color=0;color<6;color++)
{
textcolor(color);/*字体颜色*/
textbackground(color+2);/*屏幕颜色*/
clrscr();
printf("\n\n\n\n\n\n\n\n\n\n\t\t\tWelcometoStudents'AddressSystem");
printf("\n\n");
printf("\t\t\t\t\t\tDesignbyYangYing");
sleep
(1);/*延时1秒*/
clrscr();
}
while(i==0)
{
system("cls");
printf("============================Students'AddressSystem============================");
printf("****************************************\n");
printf("*NO.:
Name:
YangYingClass:
ScienceOfComputerClass1*\n");
printf("****************************************\n");
printf("================================================================================");
c=meun();
switch(c)
{
case1:
head=creat();break;/*指向creat.c*/
case2:
head=add(head);break;/*指向add.c*/
case3:
skim(head);break;/*指向skim.c*/
case4:
head=modify(head);break;/*指向modify.c*/
case5:
search(head);break;/*指向search.c*/
case6:
head=del(head);break;/*指向del.c*/
case7:
head=read();break;/*指向read.c*/
case8:
save(head);break;/*指向save.c*/
case0:
exit(0);/*退出系统*/
default:
printf("\Discorrect!
Pleaseenteragain.\n\n");
}
}
getch();
}
具体实现:
设置了开始的欢迎词,并且对照参考书设置了背景色和字体颜色,每种颜色延时1秒,在此函数中输入了自己的学号班级姓名,并且用switch语句实验了选择功能操作的函数指向。
menu.c
#include
externintn;
intmeun(void)
{
inti;
printf("\n\n");
printf("#####menu#####\n");
printf("************************************************************\n");
printf("|1:
Creat2:
Additem3:
Skimitems|\n");
printf("|4:
Modifyitem5:
Searchitem6:
Deleteitem|\n");
printf("|7:
Readfile8:
Saveitem0:
Exitsystem|\n");
printf("************************************************************\n");
printf("\n\tPleasechoosethenumberwhichyouWANT:
");
scanf("%d",&i);
return(i);
}
具体实现:
主要表现了主函数的菜单,供用户选择。
1选项是建立链表并且创建多个新记录
2选项是在链表后面追加若干个记录
3选项是浏览存储的记录
4选项是修改已有的记录
5选项是查找记录
6选项是删除系统中的记录
7选项是从外部文件读取记录
8选项是保存记录到外部文件
0选项是推出系统
creat.c
#include
externintn;
structaddbok*creat(void)/*引用结构体addbok*/
{
inti=2;
structaddbok*p1,*p2,*head;
floata;
p1=p2=(structaddbok*)malloc(LEN);
head=NULL;
system("cls");
printf("\n========================Enteranewrecord,STOPby\"0\"===========================");
printf("\n");
printf("NO.1:
\n");
printf("Num.:
");
scanf("%ld",&p1->num);
if(p1->num==0)
{printf("\n\n");
printf("\nWrittenover\n");
getch();
system("cls");
return(head);}
printf("Name:
");
scanf("%s",p1->nam);
printf("Tel.:
");
scanf("%s",p1->tel);
printf("Sex:
");
scanf("%s",p1->sex);
printf("Age:
");
scanf("%d",&p1->age);
printf("Birthday:
");
scanf("%s",p1->bir);
printf("Dormitory:
");
scanf("%s",p1->dor);
while(p1->num!
=0)
{
n=n+1;
if(n==1){head=p1;}
elsep2->next=p1;
p2=p1;
p1=(structaddbok*)malloc(LEN);
printf("\n");
printf("NO.%d:
\n",i);
i=i+1;
printf("Num.:
");
scanf("%ld",&p1->num);
if(p1->num==0)
{p2->next=NULL;
printf("\n\n");
printf("\nWrittenover\n");
getch();
system("cls");
return(head);}
printf("Name:
");
scanf("%s",p1->nam);
printf("Tel.:
");
scanf("%s",p1->tel);
printf("Sex:
");
scanf("%s",p1->sex);
printf("Age:
");
scanf("%d",&p1->age);
printf("Birthday:
");
scanf("%s",p1->bir);
printf("Dormitory:
");
scanf("%s",p1->dor);
}
p2->next=NULL;
printf("\n\n");
printf("\nWrittenover\n");
getch();
system("cls");
return(head);
}
具体实现:
创建链表并且输入若干个记录,返回菜单使用“0”。
add.c
#include
externintn;
structaddbok*add(structaddbok*head)
{
structaddbok*p1,*p2,*p0;
floata;
intyy=1;
system("cls");
printf("\nTherecordsyouenteredwillbeaddtothelastrecord.\n");
while(yy!
=0)
{
p1=(structaddbok*)malloc(LEN);
p0=p2=head;
printf("=====Enteranewrecord=====\n");
printf("\n");
printf("Num.:
");
scanf("%ld",p1->num);
printf("Name:
");
scanf("%s",p1->nam);
printf("Tel.:
");
scanf("%s",p1->tel);
printf("Sex:
");
scanf("%s",p1->sex);
printf("Age:
");
scanf("%d",&p1->age);
printf("Birthday:
");
scanf("%s",p1->bir);
printf("Dormitory:
");
scanf("%s",p1->dor);
if(p2==NULL)
{
n=n+1;
head=p1;
p1=NULL;
}
else
{if(p2->next==NULL)
{
n=n+1;
p2->next=p1;
p1->next=NULL;
}
else
{
while(p2->next!
=NULL)
{
p0=p2;
p2=p2->next;
}
n=n+1;
p2->next=p1;
p1->next=NULL;
}
}
printf("\n----Writtenover----\n");
printf("\nEnter\"0\"tothemenu,Anykeygoon:
");
scanf("%d",&yy);
}
system("cls");
return(head);
}
具体实现:
追加记录,具体操作方法和creat.c一样
del.c
#include
externintn;
structaddbok*del(structaddbok*head)
{structaddbok*p1,*p2;
longnum;
intyy=1;
system("cls");
printf("\n=================================Deleterecord=================================\n");
while(yy!
=0)
{
if(head==NULL)
{
printf("\nEmpty\n");
gotoend;}
printf("\nEnterthenum.youwanttodelete:
");
scanf("%ld",&num);
p1=head;
while(num!
=p1->num&&p1->next!
=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)
{
if(p1==head)
{head=p1->next;n=n-1;
printf("\n-----~Delete~------\n");
gotoend;}
else
{p2->next=p1->next;n=n-1;
printf("\n-----~Delete~------\n");
gotoend;}
}
else{printf("\nSorry,cannotfindtherecord!
\n");
gotoend;}
end:
{printf("\nEnter\"0\"tothemenu,Anynumbergoon:
");
scanf("%d",&yy);}
}
system("cls");
return(head);
}
具体实现:
删除记录。
在没有记录的时候系统将会给出提示“空”,若有记录则按照记录的学生编号删除,若没有用户输入的学生则显示找不到该记录。
modify.c
#include
externintn;
structaddbok*modify(structaddbok*head)
{
structaddbok*p1,*p2;
longnum;
intx,yy=1;
floata;
p1=head;
system("cls");
printf("\n================================Modifyarecord================================\n");
if(head==NULL)
{
printf("\n===Norecordnow===\n");
return(head);}
printf("\nPleaseinputtheNum.:
");
scanf("%ld",&num);
while(num!
=p1->num&&p1->next!
=NULL)
{p2=p1;p1=p1->next;}
if(num==p1->num)
{
printf("\nHOHO!
TheRecordyouwantisbelow:
\n");
printf("%-12s%-12s%-12s%-10s%-10s%-10s%-12s","Num.","Name","Tel.","Sex","Age","Birthday","Dormitory");
printf("%-12ld%-12s%-12s%-10s%-10d%-10s%-12s\n",p1->num,p1->nam,p1->tel,p1->sex,p1->age,p1->bir,p1->dor);
printf("\n================================================================================\n");
while(yy!
=0)
{printf("\n*************WhichonedoyouwanttoModify?
***************\n");
printf("1:
Num.2:
Name\n");
printf("3:
Tel.4:
Age\n");
printf("\n************************************************************\n");
printf("yourchoose:
");
scanf("%d",&x);
switch(x)
{
case1:
printf("OriginNum.:
%ld\n",p1->num);
printf("PleaseinputanewNum.:
");
scanf("%ld",&num);
p1->num=num;
printf("\n**Success!
**\n");
break;
case2:
printf("Originname\n",p1->nam);
printf("\nPleaseinputanewname:
");
scanf("%s",p1->nam);
printf("\n**Success!
**\n");
break;
case3:
printf("OriginTel.:
%s===\n",p1->tel);
printf("\nPleaseinputanewTel.:
");
scanf("%s",p1->tel);
printf("\n**Success!
**\n");
break;
case4:
printf("Originage:
%d===\n",p1->age);
printf("\nPleaseinputthenewage:
");
scanf("%d",&p1->age);
printf("\n**Success!
**\n");
break;
}
printf("\nEnter\"0\"tothemenu,Anynumbergoon:
");
scanf("%d",&yy);
}
}
else{printf("\nSorry,cannotfindtherecordyouwant!
\n");getch();}
system("cls");
return(head);
}
具体实现:
用了switch语句实现了按照学生编号,学生姓名,学生电话,学生年龄这4项功能的修改。
修改的记录将替换原有的记录。
read.c
#include
externintn;
structaddbok*read(void)
{
inti;
structaddbok*p1,*p2,*kt;
FILE*fp;
system("cls");
fp=fopen("addbok.txt","rb");
n=getw(fp);
p1=p2=(structaddbok*)malloc(LEN);
kt=p1;
fread(p1,sizeof(structaddbok),1,fp);
for(i=0;i<(n-1);i++)/*此语句可以这样用我不知道,网上翻来的*/
{
p1=(structaddbok*)malloc(LEN);
p2->next=p1;
p2=p1;
fread(p1,sizeof(structaddbok),1,fp);/*读写一个数据块*/
}
fclose(fp);
printf("\n===AlreadyReading===\n\n");
getch();
return(kt);
}
具体实现:
从外部文件读取addbok.txt,addbok.txt是保存了用户所输入的记录的文件。
其中for语句有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 8822207