《数据结构》课程设计报告姓名:刁方圆学号:0907052218班级:09软2设计时间:2010.12.20~2010.12.24 审阅教师:谢彦麒课程设计报告通讯录管理系统•一、题目内容的描述通讯录一般包括通讯者的编号、姓名、性别、电话及地址等信息,设计一个通讯录要求实现通讯者的插入、查询、删除、更新、排序操作。
•二、应用程序功能的详细说明程序主要能实现添加记录、查找记录、删除记录。
•三、输入数据类型、格式和内容限制;本程序所有数据都可输入字符型。
•四、主要模块的算法描述生成菜单:创建结点:struct record{char name[8];char sex[20];char num[20];char tel[20];char address[20];}student[500];struct slnode{record date;struct slnode *next;struct slnode *prior;};利用顺序表储存通讯录信息。
查找函数search():printf("\n\t\t请输入姓名:");scanf("%s",name);for(int i=a;i<num;i++,p=p->next){if(strcmp(name,p->next->)==0){p rintf….. ..记录删除:for (j=i;j<num-1;j++)student[j]=student[j+1];num--;创建通讯录:添加一项记录:删除操作:•五、结束语通过本题的锻炼,让我更加熟悉顺序表的使用了。
顺序表虽然查询比较方便,但在插入删除操作都比较繁琐。
或许还能用链式表做改进。
•六、程序的源代码清单#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>struct record{char name[8];char sex[20];char num[20];char tel[20];char address[20];}student[500];struct slnode{record date;struct slnode *next;struct slnode *prior;};typedef slnode * linklist;linklist l;int num=0;FILE *fp;void mainmenu();void searchmenu();void enter();void search();void display();void load();void save();void delet();void listinsert();void initlist();void main(){initlist();load();listinsert();while (1)mainmenu();}void load(){if((fp=fopen("student.bin","rb"))==NULL){printf("\n\t\t通讯录文件不存在");if ((fp=fopen("student","wb"))==NULL){printf("\n\t\t建立失败");exit(0);}else{printf("\n\t\t通讯录文件已建立");printf("\n\t\t按任意键进入主菜单");getch();return;}exit(0);}fseek(fp,0,2);if (ftell(fp)>0){rewind(fp);for (num=0;!feof(fp) && fread(&student[num],sizeof(struct record),1,fp);num++);printf("\n\t\t文件导入成功");printf("\n\t\t按任意键返回主菜单");getch();return;}printf("\n\t\t文件导入成功");printf("\n\t\t通讯录文件中无任何纪录");printf("\n\t\t按任意键返回主菜单");getch();return;}void mainmenu()//主菜单{char choic;system("cls");printf("\n\t\t***************欢迎进入通讯录系统***************");printf("\n\t\t******************1-新添纪录 ******************");printf("\n\t\t******************2-查找联系人 ****************");printf("\n\t\t******************3-删除联系人 ***************");printf("\n\t\t******************4-保存退出 *****************"); printf("\n\t\t******************5-不保存退出 ***************"); printf("\n\t\t************************************************");printf("\n\t\t请选择:");choic=getch();switch (choic){case '1':enter();break;case '2':searchmenu();break;case '3':delet();break;case '4':save();break;case '5':exit(0);default:mainmenu();}}void searchmenu()//查询菜单{char choic;system("cls");printf("\n\t\t******************* 查询菜单 *******************");printf("\n\t\t**************** 1-显示所有 ********************");printf("\n\t\t**************** 2-按姓名查询 ******************");printf("\n\t\t**************** 3-返回主菜单 ******************");printf("\n\t\t************************************************");printf("\n\t\t请选择:");choic=getch();switch (choic){case '1':display();break;case '2':search();break;case '3':mainmenu();break;}}void enter()//添加纪录{printf("\n\t\t**************** 请输入学生信息****************\n");printf("\n\t\t姓名:");scanf("%s",&student[num].name);printf("\n\t\t性别:");scanf("%s",&student[num].sex);printf("\n\t\t编号:");scanf("%s",&student[num].num);printf("\n\t\t输入电话:");scanf("%s",&student[num].tel);printf("\n\t\t地址:");scanf("%s",&student[num].address);num++;printf("\n\t\t是否继续添加?(Y/N):");if (getch()=='y')enter();return;}void display()//显示所有{int i;system("cls");if(num!=0){printf("\n\t\t*************** 以下为通讯录所有信息************");for (i=0;i<num;i++){printf("\n\t\t姓名: %s",student[i].name);printf("\n\t\t性别: %s",student[i].sex);printf("\n\t\t编号: %s",student[i].num);printf("\n\t\t电话: %s",student[i].tel);printf("\n\t\t地址: %s",student[i].address);printf("\t\t");if (i+1<num){printf("\n\t\t__________________________");system("pause");}}printf("\n\t\t************************************************");}elseprintf("\n\t\t通讯录中无任何纪录");printf("\n\t\t按任意键返回主菜单:");getch();return;}void save()//写入文件{int i;if ((fp=fopen("student","wb"))==NULL){printf("\n\t\t文件打开失败");}for (i=0;i<num;i++){if (fwrite(&student[i],sizeof(struct record),1,fp)!=1){printf("\n\t\t写入文件错误!\n");}}fclose(fp);printf("\n\t\t通讯录文件已保存");printf("\n\t\t按任意键退出程序\n\t\t");exit(0);}void listinsert()//增加一个结点{linklist s,p=l;for(int i=0;i<num;i++){s=new slnode;strcpy(s->,student[i].name);strcpy(s->date.num,student[i].num);strcpy(s->date.sex,student[i].sex);strcpy(s->date.tel,student[i].tel);strcpy(s->date.address,student[i].address);s->prior=p->prior;s->next=p;p->prior->next=s;p->prior=s;p=p->next;}}void initlist(){l=new slnode;l->next=l;l->prior=l;}void search(){int j=0,a=0;linklist p=l;printf("\n\t\t***************** 按姓名查找 *******************");char name[8];printf("\n\t\t请输入姓名:");scanf("%s",name);for(int i=a;i<num;i++,p=p->next){if(strcmp(name,p->next->)==0){printf("查询到的信息:");printf("\n");printf("姓名:");printf("%s",p->next->);printf("\n");printf("编号:");printf("%s",p->next->date.num);printf("\n");printf("地址:");printf("%s",p->next->date.address);printf("\n");printf("性别:");printf("%s",p->next->date.sex);printf("\n");printf("电话:");printf("%s",p->next->date.tel);j++;}if(j==0)printf("\t\t该通讯录没有该人!");if ((i+1)<num){printf("\n\t\t是否继续查找相同名字的学生信息:(y/n)");if (getch()=='y'){a=i;continue;}elsereturn;}else{printf("\n\t\t按任意键返回主菜单");getch();return;}}}void delet(){int a=0;int findmark=0;int j;int deletemark=0;int i;char name[8];printf("\n\t\t请输入要删除学生姓名:");scanf("%s",name);for (i=a;i<num;i++){if (strcmp(student[i].name,name)==NULL){printf("\n\t\t以下是您要删除的学生纪录:");findmark++;printf("\n\t\t________________________________");printf("\n\t\t姓名: %s",student[i].name);printf("\n\t\t性别: %s",student[i].sex);printf("\n\t\t编号: %s",student[i].num);printf("\n\t\t电话: %s",student[i].tel);printf("\n\t\t地址: %s",student[i].address);printf("\n\t\t________________________________");printf("\n\t\t是否删除?(y/n)");if (getch()=='y'){for (j=i;j<num-1;j++)student[j]=student[j+1];num--;deletemark++;printf("\n\t\t删除成功");if((i+1)<num){printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)");if (getch()=='y'){a=i;continue;}}printf("\n\t\t是否继续删除?(y/n)");if (getch()=='y')delet();return;}if((i+1)<num){printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)");if (getch()=='y'){a=i;continue;}}}elsecontinue;}if ((deletemark==0)&&(findmark==0)){printf("\n\t\t没有该同学的纪录");return;}elseif (findmark!=0){printf("\n\t\t没有重名信息");printf("\n\t\t没有该同学的纪录");return;}}仓库管理系统•一、题目内容的描述设计一个仓库管理系统,可以按照顺序和货物名称查询仓库的存储情况,也可以增加或删除货物。