C语言课程设计报告212899.docx

上传人:b****5 文档编号:29450922 上传时间:2023-07-23 格式:DOCX 页数:30 大小:21KB
下载 相关 举报
C语言课程设计报告212899.docx_第1页
第1页 / 共30页
C语言课程设计报告212899.docx_第2页
第2页 / 共30页
C语言课程设计报告212899.docx_第3页
第3页 / 共30页
C语言课程设计报告212899.docx_第4页
第4页 / 共30页
C语言课程设计报告212899.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

C语言课程设计报告212899.docx

《C语言课程设计报告212899.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告212899.docx(30页珍藏版)》请在冰豆网上搜索。

C语言课程设计报告212899.docx

C语言课程设计报告212899

 

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语句有点

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1