电话簿管理系统.docx

上传人:b****5 文档编号:3370574 上传时间:2022-11-22 格式:DOCX 页数:47 大小:247.59KB
下载 相关 举报
电话簿管理系统.docx_第1页
第1页 / 共47页
电话簿管理系统.docx_第2页
第2页 / 共47页
电话簿管理系统.docx_第3页
第3页 / 共47页
电话簿管理系统.docx_第4页
第4页 / 共47页
电话簿管理系统.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

电话簿管理系统.docx

《电话簿管理系统.docx》由会员分享,可在线阅读,更多相关《电话簿管理系统.docx(47页珍藏版)》请在冰豆网上搜索。

电话簿管理系统.docx

电话簿管理系统

课程设计说明书

设计名称:

题目:

电话簿管理系统

学生姓名:

专业:

班级:

学号:

指导教师:

日期:

—年—月—日

课程设计任务书

专业年级班

设计题目

(一)学生成绩排名

(二)根据条件进行学生成绩排名

(三)链表的操作(链表的建立,访问,删除链表指定结点,增加结点)

(四)学生成绩文件管理(五)一个综合系统(电话簿管理系统)

二、主要内容

2.1学生成绩排名

采用选择法,将学生成绩从高到低进行排序,再输入一个学生的成绩,将此成绩按照排序规律插入已排好序的学生成绩数组,最后将排好序的成绩单进行反

序存放。

2.2根据条件进行学生成绩排名

在函数中进行10个学生成绩从高到低排名,再改进函数,进行n个学生成绩从高到低排名,排名方式根据函数的style参数进行,如style为‘a'按升序排,style为'd'按降序排。

(a:

ascending升,d:

descending降)

编写多个不同函数,使之能实现不同的排序算法(3种以上),再编写一个通用输出函数,(要求用函数指针做参数)能分别打印不同排序算法的结果。

2.3链表的操作(链表的建立,访问,删除链表指定结点,增加结点)建立一个动态链表,将学生数据(学号,成绩)存入链表结构中,实现链表

的访问(求学生成绩的平均分,找到最高分,最低分,将其数据输出)。

删除指

定学号的学生数据,对学生数据进行排序,分别在链表头部,中间,末尾插入学生数据。

2.4学生成绩文件管理

定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩,输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩,输出三门课程的平均分数最高的学生的学号、姓名及其平均分,将10个学生的相关数据,存入文件中,再从文件中读出,按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件中,再从文件中读取第1,3,5,7,9个学生的数据。

2.5一个综合系统(电话簿管理系统)

数据库的主要数据包括:

姓名、工作单位、电话号码、E-mail地址。

要求具有以下功能:

(1)系统以菜单方式工作。

(2)添加、删除、修改任意个记录。

(3)显示、保存记录。

(4)排序功能:

按电话号码排序和按照姓名字母序排序。

(5)查询功能:

按人名查询电话号码和按电话号码查询人名。

三、具体要求

围绕课程设计的目的和意义,基本要求如下:

1、认真阅读《C语言课程设计》指导书,明确课程设计的目的、意义和要求;

2、快速总结C程序设计语言的精髓,如:

函数的概念、函数的设计和函数的调用;

3、快速熟悉TuberC或C++的上机环境。

能熟练进行高级编辑操作(特别是字块操作);熟悉步进式、断点跟踪的程序调试方法,提高工作效率。

4、根据“课程设计题目”,采用结构化的程序设计思想,确定系统的总体设计方案、确"定时间进度。

5•学习并了解良好的程序设计风格。

按质、按量、并按时间完成课程设计的任务。

6•提供可运行的课程设计系统,参加上机面试答辩。

本次课程设计的重点是:

学会设计并编写函数,掌握好各函数之间的调用

关系;利用文件操作函数,建立数据库并完成对数据库的各种操作;掌握几种典型算法的应用(如:

冒泡法、选择排序法和折半查找法)。

同时锻炼学生根据题目进行分析、设计、编码、调试程序和书写必要文档的综合处理能力,从实践中学习并体会程序设计的结构化思想和设计方法。

四、进度安排

依照教学计划,课程设计时间为3周。

按照软件工程的思想,软件系统的分析设计至关重要,并要充分重视书写“文档”。

避免甚至杜绝“拿到题目就编码”的现象。

建议将时间分为三个阶段:

第一阶段,根据题目要求,拿出系统的总体设计方案:

即构思各程序模块的算法,并画出相应的N-S图,同时编写相应的文档;第二阶段,根据N-S图编写程序代码并单独调试,再将调试通过的各个子模块进行集成调试;

第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。

三个阶段时间分配的大概比例是:

35:

45:

20。

五、完成后应上交的材料

1.课程设计任务分析

2.系统功能和各子模块的功能

3..实验设计思路(或算法)简述,源程序代码(要求在关键的位置有注释,从而增加程序的可读性);

4.实验设计步骤

5.实验设计的实验结果

6.实验设计的分析讨论,主要包括以下内容:

(1)课程设计中遇到的主要问题和解决方法;

(2)你的创新和得意之处;

3)设计中存在的不足及改进的设想;

以上完成的源程序及相关文档,填写在《课程设计说明书》上,要求干净整洁,符合课程设计的要求和规范。

六、总评成绩

指导教师签名日期年—月—日

系主任审核日期年月日

一、设计任务分析1

1.1学生成绩排名1

1.2根据条件进行学生成绩排名1

1.3链表的操作1

1.4学生成绩文件管理1

1.5电话簿管理系统1

二、系统功能2

2.1学生成绩排名2

2.2根据条件进行学生成绩排名2

2.3链表的操作2

2.4学生成绩文件管理2

2.5电话簿管理系统3

三、实验设计思路3

3.1学生成绩排名3

3.2根据条件进行学生成绩排名5

3.3链表的操作10

3.4学生成绩文件管理15

3.5电话簿管理系统20

四、实验设计步骤26

4.1学生成绩排名26

4.2根据条件进行学生成绩排名27

4.3链表的操作28

4.4学生成绩文件管理28

4.5电话簿管理系统29

五、实验设计的实验结果30

5.1学生成绩排名30

5.2根据条件进行学生成绩排名31

5.3链表的操作32

5.4学生成绩文件管理33

5.5电话簿管理系统35

六、实验设计的分析讨论37

6.1课程设计中遇到的主要问题和解决方法37

6.2本程序的创新和得意之处37

6.3设计中存在的不足及改进的设想37

6.4本次课程设计的感想和心得体会38

一、设计任务分析

1.1学生成绩排名

采用选择法,将学生成绩从高到低进行排序,

序存放。

1.2根据条件进行学生成绩排名

再改进函数,进行n个学生

在函数中进行10个学生成绩从高到低排名,成绩从高到低排名,排名方式根据函数的style参数进行,如style为‘a'按升序

排,style为'd'按降序排。

(a:

ascending升,d:

descending降)

编写多个不同函数,使之能实现不同的排序算法(3种以上),再编写一个通用输出函数,(要求用函数指针做参数)能分别打印不同排序算法的结果。

1.3链表的操作(链表的建立,访问,删除链表指定结点,增加结点)

建立一个动态链表,将学生数据(学号,成绩)存入链表结构中,实现链表的访问(求学生成绩的平均分,找到最高分,最低分,将其数据输出)。

删除指

定学号的学生数据,对学生数据进行排序,分别在链表头部,中间,末尾插入学生数据。

1.4学生成绩文件管理

定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩,输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩,输出三门课程的平均分数最高的学生的学号、姓名及其平均分,将10个学生的相关数据,存入文

件中,再从文件中读出,按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件中,再从文件中读取第1,3,5,7,9个学生的数据。

1.5一个综合系统(电话簿管理系统)

数据库的主要数据包括:

姓名、工作单位、电话号码、E-mail地址。

要求具有以下功能:

(1)系统以菜单方式工作。

(2)添加、删除、修改任意个记录。

(3)显示、保存记录。

(4)排序功能:

按电话号码排序和按照姓名字母序排序。

(5)查询功能:

按人名查询电话号码和按电话号码查询人名

二、系统功能

2.1学生成绩排名选择法排序输入的11个学生的成绩并输出。

模块一:

定义一个数组a[11],用以存放学生的成绩模块二:

用选择法对输入的成绩进行排序模块三:

插入一个数,将a[i]后面的数字后移一位,重新排序模块四:

将排好序的成绩单进行反序存放,即原来是从高到低,现在改为低到高排列

2.2根据条件进行学生成绩排名

A.

模块一:

sort函数实现10个学生成绩排序模块二:

sort1函数实现n个学生成绩排序模块三:

voidsort2实现排序方式输入a按升序排,输入d按降序排B.

模块一:

定义bubblesorta(int*a,intn);*bubblesortd(int*a,intn);

*selectsorta(int*a,intn);int*selectsortd(int*a,intn);对其进行用冒泡法进行升序排列,用冒泡进行降序排列,用选择法进行升序排列,用选择法进行降序排列模块二:

编写通用输出函数show(inta[],intn,int*(*fun)(a[],int

n)),其中a[]为成绩数组,n为数组元素个数。

fun为函数指针,函数的特点为有两个参数,一个为整型数组,一个为整数,返回值为指向整型变量的指针)

2.3链表的操作(链表的建立,访问,删除链表指定结点,增加结点)模块一:

定义,头文件

模块二:

创建链表模块三:

输出链表模块四:

max函数求出最高分模块五:

min函数求出最低分模块六:

average函数求出平均分模块七;删除节点模块八:

插入节点模块九:

sort函数实现成绩的排序模块十:

主函数

2.4学生成绩文件管理模块一:

定义一个结构体数组

模块二:

max_score(函数实现单门课程成绩最高分模块三:

max_average(实现三门课程平均成绩最高分模块四:

save(void)函数实现文件stud-dat的存入模块五:

paixu()函数实现文件stud-dat的排序

studsort.dat中

3,5,7,9个学生的数

模块六:

copy函数实现将结果输出到屏幕上和另一文件模块七:

sort函数实现从studsort.dat文件中读取第1,据

模块八:

input函数实现学生成绩的输入

模块九:

output函数实现学生成绩的输出模块十:

主函数

2.5一个综合系统(电话簿管理系统)模块一:

定义结构体

模块二:

menu()函数实现程序的主菜单

模块三:

key函数实现用户输入的口令

模块四:

shuru函数实现用户要输入的通信录信息

模块五:

xianshi函数实现用户已经输入的信息

模块六:

find函数实现想要查找的信息

模块七:

shanchu函数实现想要删除的通信录信息

模块八:

chazhao函数实现删除信息后用户要查找的信息模块九:

xiugai函数实现用户要修改的信息模块十:

tianjia函数实现用户要添加进去的信息模块十一:

tuichu函数实现用户退出电话簿管理系统三.实验设计思路(原代码程序)

3.1学生成绩排名

#include

voidmain()

{

/*定义一个数组a[11],用以存放学生的成绩*/

inti,j,min,temp,a[11];

printf("请输入10个学生的成绩:

\n");〃

for(i=0;i<=9;i++)

{

printf("a[%d]=",i);

/*从键盘输入10个学生成绩*/

scanf("%d",&a[i]);/*输入10个数*/

}

printf("\n");

printf("输入的10个学生的成绩为:

\n");

for(i=0;i<=9;i++)

printf("%5d",a[i]);printf("\n");for(i=9;i>=1;i--){

min=i;

for(j=i-1;j>=0;j--)if(a[min]>a[j])min=j;temp=a[i];a[i]=a[min];a[min]=temp;

}

/*输出数组*/

/*排序,只需执行9次*/

/*i与后面的数字比较,得到最小的数字*/

/*交换*/

printf("\n10个学生的成绩从高到低排序为:

\n");for(i=0;i<=9;i++)

printf("%5d",a[i]);/*输出已排序的数组*/printf("\n");

printf("插入后的学生成绩从高到低排序为:

\n");

for(i=0;i<11;i++)

printf("%5d",a[i]);

printf("\n");

/*将排好序的成绩单进行反序存放,即原来是从高到低,现在改为从低到高排列*/

for(i=0;i<11/2;i++)

{

temp=a[i];

/*将对称的元素互换*/

a[i]=a[10-i];

a[10-i]=temp;

}

printf("插入后学生成绩从低到高排序为:

\n");

for(i=0;i<11;i++)

printf("%5d",a[i]);

printf("\n");

}

3.2.根据条件进行学生成绩排名

A.

#include

voidmain()

{

voidsort(inta[10]);/*声明sort函数,10个学生成绩排序*/

inta[10],i;

printf("请输入10个学生的成绩:

\n");

for(i=0;i<=9;i++)

{

printf("a[%d]=",i);scanf("%5d",&a[i]);

}

sort(a);/*调用sort函数*/

printf("输入的10个学生成绩从高到低排序为:

\n");

for(i=0;i<=9;i++)/*输出排序后的数组*/

printf("%5d",a[i]);

printf("\n");

voidsort1(intb[],intn);/*声明sortl函数,n个学生成绩排序*/

intb[100],n;

printf("请输入学生的人数n:

");

scanf("%d",&n);

printf("输入学生成绩为n:

\n");

for(i=0;i

{

printf("b[%d]=",i);

scanf("%5d",&b[i]);

}

sort1(b,n);/*调用sort1函数*/

printf("输入的n个学生成绩从高到低排序为:

\n");for(i=0;i

printf("%5d",b[i]);

printf("\n");

voidsort2(intb[],intn,charstyle);

charstyle,t;

printf("请输入排序方式,输入a按升序排,输入d按降序排:

\n",t);

scanf("%c",&t);

sort2(b,n,t);

printf("学生的成绩排序为:

\n");

for(i=0;i

printf("%5d",b[i]);

printf("\n");

}

/*函数声明*/

voidsort(inta[10])

{

inti,j,min,temp;

for(i=9;i>=1;i--)

{

min=i;

for(j=i-1;j>=0;j--)

if(a[min]>a[j])

min=j;

temp=a[i];

a[i]=a[min];a[min]=temp;

}

}

/*定义sort函数*/

/*i与后面的数字比较,得到最小的数字*/

/*交换*/

voidsort1(intb[],intn)

{

inti,j,min,temp;for(i=n-1;i>=1;i--){min=i;

for(j=i-1;j>=0;j--)if(b[min]>b[j])min=j;temp=b[i];b[i]=b[min];b[min]=temp;}}

/*定义sort1函数*/

/*i与后面的数字比较,得到最小的数字*/

/*交换*/

/*定义sort2函数*/

voidsort2(intb[],intn,charstyle)

inti,j,min,temp;if(style=='a')for(i=0;i

{

min=i;for(j=i+1;j

{if(b[min]>b[j])min=j;temp=b[i];b[i]=b[min];b[min]=temp;

}

}

if(style=='d')for(i=n-1;i>=1;i--){

min=i;for(j=i-1;j>=0;j--)

{

if(b[min]>b[j])min=j;

temp=b[i];b[i]=b[min];b[min]=temp;

}

}

}

B.

#include

voidmain()

{

int*bubblesorta(int*a,intn);int*bubblesortd(int*a,intn);int*selectsorta(int*a,intn);int*selectsortd(int*a,intn);

/*升序排列*/

/*i与后面的数字比较,得到最小的数字*/

/*交换*/

/*降序排列*/

/*i与后面的数字比较,得到最小的数字*/

/*交换*/

voidshow(int*a,intn,int*(*fun)(int*a,intn));int*p,i,a[100],n;

p=a;

printf("请输入n的值:

");

scanf("%d",&n);

printf("输入n个数据:

\n");

for(i=0;i

{

printf("a[%d]=",i);

scanf("%5d",&a[i]);

}

p=a;

printf("用冒泡法进行升序排列:

\n");

show(a,n,selectsorta);

printf("\n");

p=a;

printf("用冒泡进行降序排列:

\n");show(a,n,bubblesortd);

printf("\n");

p=a;

printf("用选择法进行升序排列:

\n");show(a,n,selectsorta);

printf("\n");

{

temp=*(a+i);

*(a+i)=*(a+i+1);*(a+i+1)=temp;

}

returna;

}

int*selectsorta(int*a,intn)

{

inti,j,min,temp;

for(i=0;i

{

min=i;

for(j=i+1;j

{

if(*(a+min)>*(a+j)){min=j;

temp=*(a+i);

*(a+i)=*(a+min);

*(a+min)=temp;

}

}

}

returna;

}

int*selectsortd(int*a,intn)

{

inti,j,min,temp;

for(i=n-1;i>=1;i--)

{

min=i;

for(j=i-1;j>=0;j--)

{

if(*(a+min)>*(a+j))min=j;

temp=*(a+i);

*(a+i)=*(a+min);

*(a+min)=temp;

}

}

/*选择法升序*/

/*选择法降序*/

returna;

voidshow(int*a,intn,int*(*fun)(int*a,intn))

{

inti;

a=(*fun)(a,n);for(i=0;i

printf("%5d",a[i]);

}

3.3链表的操作(链表的建立,访问,删除链表指定结点,增加结点)

#include

#include

#defineNULL0

#defineLENsizeof(structstudent)〃LEN为structstudent类型数据长度,sizeof为求字节数运算符

structstudent

{

longnum;

floataverage;

floatscore;

structstudent*next;

};

intn;

/*创建链表*/

structstudent*creat(void)//creat函数带回一个指向链表头的指针

{

structstudent*head;

structstudent*p1,*p2;

n=0;

pl=p2=(structstudent*)malloc(LEN);//(structstudent*)使malloc返回的指针转换为指向structstudent类型数据的指针,malloc带回的是不指向任何类型的数据的指针(void*)

scanf("%ld,%f",&p1->num,&p2->score);

head=NULL;

while(p1->num!

=0)

{

n=n+1;

if(n==1)head=p1;

else

p2->next=p1;

p2=p1;

p1=(structstudent*)malloc(LEN);//开辟一个新单元scanf("%ld,%f",&p1->num,&p1->score);

}

p2->next=NULL;

return(head);

}

/*输出链表*/

voidprint(structstudent*head)

{

structstudent*p;

printf("\n经排序后,这%d个学生的成绩是:

\n",n);

p=head;

if(head!

=NULL)

do

{

printf("%ld%5.1f\n",p->num,p->score);//输出p所指向的结点

p=p->next;

}

while(p!

=NULL);

}

/*求最高分*/

voidmax(structstudent*head)

{

floatmax;

max=head->score;

while(head!

=NULL)

{

if(head->score>max)

max=head->score;

head=head->next;

}

printf("输入的学生成绩的最高分数是:

%5.2f\n",max);

}

/*求最低分*/

voidmin(structstudent*head)

{

floatmin;

min=head->score;

while(head!

=N

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

当前位置:首页 > 高中教育 > 其它课程

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

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