C语言课程设计报告
题 目:
设 计 者:
专业班级:
学 号:
指导教师:
年月日
河南理工大学计算机学院
1 题目与要求(左对齐,宋体粗四号)
◆ 建立通讯录信息,信息至少包含编号、姓名、年龄、电话、通讯地址、电子邮箱等;
◆ 能够提供添加、删除和修改通讯录信息的功能;
◆ 能够提供安不同方式查询的功能;如按姓名或年龄、电话等查询; ◆ 将通讯录保存在文件中;
◆ 能够按表格方式输出通讯录信息。
1.2 本系统涉及的知识点
结构、数组、循环、函数、分支、指针(小四,宋体)
1.3 功能要求
主要包含一下多种功能:
添加:添加通讯录记录
显示:显示通讯录记录
删除:删除通讯录记录
查询:查询通讯录记录
修改:修改通讯录记录
保存:将信息保存到文件
2 功能设计(左对齐,宋体粗四号)
2.1 算法设计(左对齐,宋体粗小四号)
系统功能模块图:
添加:可以添加通讯录记录,依次输入编号、姓名、年龄、电话号码、通讯地址、电子邮箱
后,会提示是否继续添加。
显示:可以以表格形式输出所有通讯录里的记录
删除:输入欲删除的那个人的名字后,会自动删除他(她)的记录内容
查询:可以选择用姓名、电话、地址三种方式查询
修改:输入欲修改的那个人的名字后,再依次输入编号、姓名、年龄、电话号码、通讯地址、
电子邮箱即可完成修改
保存:,输入文件名(带后缀名)后,即可将通讯录信息保存到文件
① 加:添加通讯录记录
②显示:显示通讯录记录
③删除:删除通讯录记录 ④查询:查询通讯录记录
先选择查询方式,以姓名查询方式为例
⑤修改:修改通讯录记录
2.2 部分模块流程图
一 . 按名字查找显示函数 void search( )
算法:通过调用名字查找函数,输入要查找的姓名.再调用find函数通过这一函数的循环找到与之姓名相应的的字符窜返回其所在序行数,然后调用输出函数显示指定的一条记录
.
读入s
真假
reture i
真
二 . 快速查找函数:voidqseek( )
通过调用快速查找函数,确认再查找之前,记录以排好序,然后输入待查找姓名,利用折半查找,m=(I+r)/2如果中间接点姓名与待找姓名相等,则调用printf函数显示记录,并返回,if(strcmp(t[m].name.s)<0) 则I=m+1, 否则 r=m-1,继续寻找,如果I>r,现是没找到。
读入s
I=0, r=n-1
I<=r
m=(I+r)/2
真 假
printf(t[m]) 是 假
reture
I=m+1 r=m-1
真 I>r ? 假
3 程序代码设计(左对齐,宋体粗四号) 通讯录:
typedefstruct
{
char score; /*编号*/ char name[10]; /*姓名*/ char num[15]; /*号码*/ char email[20]; /*邮箱*/ char age[8]; /*年龄*/ char adds[20]; /*住址*/ }Person;
void main() {
int n=0;
for(;;)
{
switch(menu_select())
{
case 1:
printf("\n\t添加记录到通讯录\n"); n=Input(pe,n);
break;
case 2:
printf("\n\t\t\t 通讯录记录表\n"); Display(pe,n);
break;
case 3:
printf("\n\t从通讯录中删除记录\n"); n=Delete_a_record(pe,n); printf("\t");
system("pause");
break;
case 4:
printf("\n\t在通讯录中查找记录\n"); Query_a_record(pe,n); printf("\t");
system("pause");
break; /*主函数*/ /*添加记录*/ /*显示记录*/ /*删除记录*/ /*查找记录*/
} } case 5: printf("\n\t修改通讯录中的记录\n"); Change(pe,n); printf("\t"); system("pause"); break; case 6: printf("\n\t保存功能\n"); WritetoText(pe,n); printf("\t"); system("pause"); break; case 0: printf("\n\t\t谢谢使用,再见!\n"); /*结束程序*/ printf("\n\t\t"); system("pause"); exit(0); } /*保存数据*/ /*修改数据*/
设计类,对象及基本数据类型:
创建一个record类,它有五个数据成员:
char name[20]; 姓名
char age[20]; 年龄
char adress[20]; 地址
char e-mile[20]; 邮箱
char number[20]; 电话
包含函数:功能如下:
void mainmenu(); 主菜单
void searchmenu(); 查找菜单
void enter(); 新添纪录
void search(); 按姓名查询
void display(); 显示所有
void load(); 读取文件
void save(); 写入文件
void delete(); 按姓名删除
结构体:
struct record
{
char age[20];
char name[20];
char number[20];
char e-mile[20];
charadress[20];
}student[500];
structslnode
{
record date;
structslnode *next;
structslnode *prior;
4 C程序设计总结(左对齐,宋体粗四号)
这次的程序实设计实验是对我们进入大学以来学习程序设计语言结果的一次大检验。自己动手,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。但是,收获还是不小的,我不仅对C的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。
当我选择通讯录这个题目时,一开始想运用大量链表及指针来完成,但是在慢慢琢磨之后,觉得这个不一定要用链表,于是改变了编程思路。当然还有不少文件的读写问题,不过还是通过不断测试之后顺利解决了。另外一点要说的就是这个程序用了很多的循环,因此对于循环的控制要十分小心,有时while和do-while的区别也是十分重要的。
通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己
便好地学好计算机。
总体来说,这次C语言程序设计实验还是比较成功的,虽然最终程序还存在一些不足,但能取得这样的成绩我还是比较高兴的。
最后,要感谢学校为我们提供这次实验机会,也要感谢老师的教导和好心人对我的帮助与支持。
参考文献(左对齐,宋体粗四号)
内容:列出课程设计中所参考的所有书目,格式如下:
[1] 谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1 (左对齐,
宋体,五号)
[2] 陈朔鹰,C语言程序设计习题集,北京:人民邮电出版社,2003.6 一. 附录:源程序代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedefstruct
{
char score; /*编号*/
char name[10]; /*姓名*/ char num[15]; /*号码*/ char email[20]; char age[8]; char adds[20]; /*邮箱*/ /*年龄*/ /*住址*/ }Person;
Person pe[80];
intmenu_select()
{ char c; do{ system("cls"); printf("\t\t *****通讯录***** \n"); printf("\t\t┌───────┐\n"); printf("\t\t│ 1. 添加记录│\n"); printf("\t\t│ 2. 显示记录│\n"); printf("\t\t│ 3. 删除记录│\n");
} printf("\t\t│ 4. 查询记录│\n"); printf("\t\t│ 5. 修改记录│\n"); printf("\t\t│ 6. 保存记录│\n"); printf("\t\t│ 0. 退出程序│\n"); printf("\t\t└───────┘\n"); printf("\t\t请您选择(0-6):"); c=getchar(); }while(c<'0'||c>'6'); return(c-'0');
int Input(Person per[],int n)
{
}
void Display(Person per[],int n)
{
int i;
printf("----------------------------------------------------------------------\n"); /*格式*/
printf("编号姓名年龄电话号码通讯地址电子邮箱\n"); int i=0; charsign,x[10]; while(sign!='n'&&sign!='N') { printf("\t编号:"); scanf("\t%d",&per[n+i].score); printf("\t姓名:"); scanf("\t%s",per[n+i].name); printf("\t年龄:"); scanf("\t%s",per[n+i].age); printf("\t电话号码:"); scanf("\t%s",per[n+i].num); printf("\t通讯住址:"); scanf("\t%s",per[n+i].adds); printf("\t电子邮箱:"); scanf("\t%s",per[n+i].email); gets(x); printf("\n\t是否继续添加?(Y/N)"); scanf("\t%c",&sign); i++; } return(n+i);
}
printf("----------------------------------------------------------------------\n"); for(i=1;i<n+1;i++) { printf("%-5d%-8s%-6s%-13s%-15s%-15s\n",per[i-1].score,per[i-1].name,per[i-1].age,per[i-1 if(i>1&&i%10==0) { printf("\t-----------------------------------\n"); printf("\t"); system("pause"); printf("\t-----------------------------------\n"); ].num,per[i-1].adds,per[i-1].email); } } printf("----------------------------------------------------------------------\n"); system("pause");
intDelete_a_record(Person per[],int n) {
char s[20];
int i=0,j;
printf("\t请输入想删除记录中的名字:");
scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n) i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return(n); } for(j=i;j<n-1;j++) { strcpy(per[j].num,per[j+1].num); strcpy(per[j].name,per[j+1].name); strcpy(per[j].age,per[j+1].age); strcpy(per[j].adds,per[j+1].adds); strcpy(per[j].email,per[j+1].email); per[j].score=per[j+1].score; } printf("\t\t\t已经成功删除!\n"); return(n-1);
}
voidQuery_a_record(Person per[],int n) {
int m;
printf("\t\n请选择查询方式:\n"); printf("\t┌──────┐\n"); printf("\t│1------姓名│\n");
printf("\t│2------电话│\n");
printf("\t│3------地址│\n");
printf("\t│4------返回│\n");
printf("\t└──────┘\n"); printf("请选择:");
scanf("%d",&m);
while(m!=1&&m!=2&&m!=3&&m!=4) {
printf("输入错误,请重新选择:");
if(m==1) { } ; if(m==2) { char s[20]; int i=0; printf("\t请输入想查询的电话:"); char s[20]; int i=0; printf("\t请输入想查询的姓名:"); scanf("\t%s",s); while(strcmp(per[i].name,s)!=0&&i<n) i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号: %d\n",per[i].score); printf("\t此人年龄: %s\n",per[i].age); printf("\t电话号码: %s\n",per[i].num); printf("\t通讯地址: %s\n",per[i].adds); printf("\t电子邮箱: %s\n",per[i].email); } scanf("%d",&m);
}
scanf("\t%s",s); while(strcmp(per[i].num,s)!=0&&i<n) i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号: %d\n",per[i].score); printf("\t此人姓名: %s\n",per[i].name); printf("\t此人年龄: %s\n",per[i].age); printf("\t通讯地址: %s\n",per[i].adds); printf("\t电子邮箱: %s\n",per[i].email); } ; if(m==3) { } ; char s[20]; int i=0; printf("\t请输入想查询的地址:"); scanf("\t%s",s); while(strcmp(per[i].adds,s)!=0&&i<n) i++; if(i==n) { printf("\t通讯录中没有此人!\n"); return; } printf("\t此人编号: %d\n",per[i].score); printf("\t此人姓名: %s\n",per[i].name); printf("\t此人年龄: %s\n",per[i].age); printf("\t电话号码: %s\n",per[i].num); printf("\t电子邮箱: %s\n",per[i].email);
void Change(Person per[],int n) {
char s[20]; int i=0; printf("\t请输入想修改的记录中的名字:"); scanf("%s",s); while(strcmp(per[i].name,s)!=0&&i<n) i++; if(i==n)
}
{ printf("\t通讯录中没有此人!\n"); return; } printf("\t编号:"); scanf("\t%d",&per[i].score); printf("\t姓名:"); scanf("\t%s",per[i].name); printf("\t年龄:"); scanf("\t%s",per[i].age); printf("\t电话号码:"); scanf("\t%s",per[i].num); printf("\t通讯住址:"); scanf("\t%s",per[i].adds); printf("\t电子邮箱:"); scanf("\t%s",per[i].email); printf("\t修改成功!");
voidWritetoText(Person per[],int n)
{
int i=0;
FILE *fp; /*定义文件指针*/ char filename[20]; /*定义文件名*/
printf("\t保存到文件\n"); /*输入文件名*/ printf("\t请输入所保存的文件名:"); scanf("\t%s",filename); if((fp=fopen(filename,"w"))==NULL) { printf("\t无法打开文件\n"); system("pause"); return; } fprintf(fp,"******************************************通讯录******************************************\n");
fprintf(fp,"编号姓名年龄电话号码通讯地址电子邮箱\n");
fprintf(fp,"%-3d\t%-6s\t%-3s\t%-13s\t%-20s\t%-20s\n",per[i].score,per[i].name,per[i].age,per[i].num,per[i].adds,per[i].email);
i++; fprintf(fp,"------------------------------------------------------------------------------------------\n"); while(i<n) {
} fprintf(fp,"------------------------------------------------------------------------------------------\n"); fprintf(fp,"***************************************共有%d条记录****************************************\n",n);
fclose(fp); /*关闭文件*/
}
void main() /*主函数*/ printf("保存成功!\n");
{
int n=0;
for(;;)
{
switch(menu_select())
{
case 1:
printf("\n\t添加记录到通讯录\n");
n=Input(pe,n);
break;
case 2:
printf("\n\t\t\t 通讯录记录表\n");
Display(pe,n);
break;
case 3:
printf("\n\t从通讯录中删除记录\n");
n=Delete_a_record(pe,n);
printf("\t");
system("pause");
break;
case 4:
printf("\n\t在通讯录中查找记录\n");
Query_a_record(pe,n);
printf("\t");
system("pause");
break;
case 5:
printf("\n\t修改通讯录中的记录\n");
Change(pe,n);
printf("\t");
system("pause"); /*添加记录*/ /*显示记录*/ /*删除记录*/ /*查找记录*/ /*修改数据*/
break; case 6: printf("\n\t保存功能\n"); WritetoText(pe,n); /*保存数据*/ printf("\t");
system("pause");
break;
case 0:
printf("\n\t\t谢谢使用,再见!\n");
printf("\n\t\t");
system("pause");
exit(0);
}
}
}
/*结束程序*/