C++_使用C语言打造通讯录管理系统和教学安排系统的代码示例,通讯录管理系统实现了通讯

通讯录管理系统REC码友部落
实现了通讯录的录入信息、保存信息、插入、删除、排序、查找、单个显示等功能。。REC码友部落

完整的代码如下:REC码友部落

#include <stdio.h> #include <malloc.h> //得到指向大小为Size的内存区域的首字节的指针// #include <string.h> #include <stdlib.h> //标准库函数// #define NULL 0 #define LEN sizeof(struct address_list) //计算字节// int n; struct address_list {char name[30]; //名字char work[30]; //职业char handset[30]; //手机char email[30]; //电子邮件char address[30]; //通讯地址struct address_list *next; }; struct address_list *shifang(struct address_list *head); // 释放内存函数声明 //创建函数,不带头结点的链表 struct address_list *creat(void){struct address_list *head,*p1,*p2;char name[20];n=0;p1=(struct address_list *)malloc(LEN);p2=p1; //强制内存转换printf("请输入通讯录的内容!/n姓名输入为0时表示创建完毕!/n");printf("请输入姓名:");gets(name);if(strcmp(name,"0")!=0){strcpy(p1->name,name);printf("请输入职业:"); gets(p1->work);printf("请输入手机:"); gets(p1->handset);printf("请输入电子邮件:"); gets(p1->email);printf("请输入通讯地址:"); gets(p1->address);head=NULL;while(1){n=n+1; //记录通讯录人数个数if(n==1)head=p1;elsep2->next=p1;p2=p1;printf("请输入姓名:");gets(name);if(strcmp(name,"0")==0){break;}else{p1=(struct address_list *)malloc(LEN);strcpy(p1->name,name);printf("请输入职业:"); gets(p1->work);printf("请输入手机:"); gets(p1->handset);printf("请输入电子邮件:"); gets(p1->email);printf("请输入通讯地址:"); gets(p1->address);}}p2->next=NULL;return head;}elsereturn 0; } //输出函数 void print(struct address_list *head){struct address_list *p;if(head!=NULL){p=head;printf("本通讯录现在共有%d人:/n",n);printf("---姓名-------职业--------手机-------Email-------通讯地址/n");printf("==================================/n");do{printf("== %s",p->name); printf(" ");printf("%s",p->work); printf(" ");printf("%s",p->handset); printf(" ");printf("%s",p->email); printf(" ");printf("%s",p->address); printf(" /n");p=p->next;}while(p!=NULL);printf("==================================/n");}elseprintf("通讯录为空,无法输出!/n"); } //增加函数 struct address_list *insert(struct address_list *head) {struct address_list *p0,*p1,*p2;char name[20];p1=head;printf("请输入增加的内容:/n");printf("请输入姓名:"); gets(name);if(strcmp(name,"0")==0){printf("姓名不能为0,增加失败!/n");return(head);}else{p0=(struct address_list *)malloc(LEN);strcpy(p0->name,name);printf("请输入职业:"); gets(p0->work);printf("请输入手机:"); gets(p0->handset);printf("请输入电子邮件:"); gets(p0->email);printf("请输入通讯地址:"); gets(p0->address);n=n+1;if(head==NULL){head=p0;p0->next=NULL;return head;}else{while(strcmp(p0->name,p1->name)>0&&(p1->next!=NULL)){p2=p1;p1=p1->next;}if(strcmp(p0->name,p1->name)<0 || strcmp(p0->name,p1->name)==0){if(head==p1){head=p0;}else{p2->next=p0;}p0->next=p1;}else{p1->next=p0;p0->next=NULL;}return head;}} } struct address_list* delete_txl(struct address_list *head) {struct address_list *p,*q;char name[30];if(head==NULL){printf("通讯录为空,无法显示!/n");return head;}p=head;printf("请输入需要删除的人的姓名:");gets(name);if(strcmp(head->name,name)==0){head=head->next;free(p);printf("删除操作成功!/n");return head;}else{q=head,p=head->next;while(p!=NULL){if(strcmp(p->name,name)==0){q->next=p->next;free(p);printf("删除操作成功!/n");return head;}p=p->next;q=q->next;}} } //显示函数 struct address_list *display(struct address_list *head) {struct address_list *p1,*p2;char name[30];int m;if(head==NULL){printf("通讯录为空,无法显示!/n");return head;}p1=head;m=0;printf("请输入需要显示人的姓名:");gets(name);while(p1!=NULL){while((strcmp(p1->name,name))!=0 && p1->next!=NULL){p2=p1;p1=p1->next;}if(strcmp(p1->name,name)==0){m++;printf("%s的通讯内容如下:/n",name);printf("---姓名--------职业--------手机-------Email------通讯地址/n");printf("==================================/n");printf("== %s",p1->name);printf(" ");printf("%s",p1->work);printf(" ");printf("%s",p1->handset);printf(" ");printf("%s",p1->email);printf(" ");printf("%s",p1->address); printf(" /n");printf("==================================/n");}p1=p1->next;}if(m==0){printf("此人未在本通讯录中!/n");}return(head); }//排序函数 struct address_list *paixu(struct address_list *head) {struct address_list *p1,*p2;int i,j;struct address_list1{char name[30];char work[30];char handset[30];char email[30];char address[30];};struct address_list1 px[200];struct address_list1 temp;if(head==NULL){printf("通讯录为空,无法排序!/n");return(head);}p1=head;for(i=0;i<n,p1!=NULL;i++){strcpy(px[i].name,p1->name);strcpy(px[i].work,p1->work);strcpy(px[i].handset,p1->handset);strcpy(px[i].email,p1->email);strcpy(px[i].address,p1->address);p2=p1;p1=p1->next;}head=shifang(head);for(j=0;j<n-1;j++){for(i=j+1;i<n;i++){if(strcmp(px[i].name,px[j].name)<0){temp=px[i];px[i]=px[j];px[j]=temp;}}}p1=(struct address_list *)malloc(LEN);p2=p1;strcpy(p1->name,px[0].name);strcpy(p1->work,px[0].work);strcpy(p1->handset,px[0].handset);strcpy(p1->email,px[0].email);strcpy(p1->address,px[0].address);head=p1;for(i=1;i<n;i++){p1=(struct address_list *)malloc(LEN);strcpy(p1->name,px[i].name);strcpy(p1->work,px[i].work);strcpy(p1->handset,px[i].handset);strcpy(p1->email,px[i].email);strcpy(p1->address,px[i].address);p2->next=p1;p2=p1;}p2->next=NULL;printf("按姓名排序后为:/n");print(head);return(head); } //姓名查找函数 struct address_list *search(struct address_list *head) {struct address_list *p1,*p2;int m;char name[30];if(head==NULL){printf("通讯录为空,无法分类查找!/n");return(head);}p1=head;printf("********************/n");printf("** 请输入需要查找的姓名 **/n");printf("********************/n");m=0;gets(name);while(p1!=NULL){while(strcmp(p1->name,name)!=0&&p1->next!=NULL){p2=p1;p1=p1->next;}if(strcmp(p1->name,name)==0){m++;printf("你查找的内容是:/n");printf("+++++++++++++++++++++++++++++++++++/n");printf("++ %s %s %s %s %s/n",p1->name,p1->work,p1->handset,p1->email,p1->address);printf("+++++++++++++++++++++++++++++++++++/n");}p1=p1->next;if(m==0){printf("此人未在本通讯录中!/n");}break;}return(head); }//释放内存函数 struct address_list *shifang(struct address_list *head) {struct address_list *p1;while(head!=NULL){p1=head;head=head->next;free(p1);}return(head); }//文件写入函数 void save(struct address_list *head) {FILE *fp;struct address_list *p1;char tong[30];if(head==NULL){printf("通讯录为空,无法存储!/n");return;}printf("请输入保存后的文件名:");gets(tong);fp=fopen("(tong).txt","w");if(fp==NULL){printf("cannot open file/n");return;}p1=head;fprintf(fp,"姓名 职业 手机 Email 通讯地址/n");for(;p1!=NULL;){fprintf(fp,"%s %s %s %s %s/n",p1->name,p1->work,p1->handset,p1->email,p1->address);p1=p1->next;}printf("保存完毕!/n");fclose(fp); }//文件读出函数 struct address_list *load(struct address_list *head) {FILE *fp;char tong[30];struct address_list *p1,*p2;printf("请输入要输出的文件名:");gets(tong);fp=fopen("(tong).txt","r");if(fp==NULL){printf("此通讯录名不存在,无法输出!/n");return(head);}else{head=shifang(head);}p1=(struct address_list *)malloc(LEN);fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);if(feof(fp)!=0){printf("文件为空,无法打开!/n");return(head);}else{rewind(fp);p2=p1;head=p1;n=0;while(feof(fp)==0){fscanf(fp,"%s%s%s%s%s",&p1->name,&p1->work,&p1->handset,&p1->email,&p1->address);if(feof(fp)!=0)break;p2->next=p1;p2=p1;p1=(struct address_list *)malloc(LEN);n=n+1;}p2->next=NULL;p1=head;head=head->next;n=n-1;free(p1);print(head);printf("打开完毕!/n");return(head);}fclose(fp); }//综合操作函数 struct address_list *menu(struct address_list *head) {char num[10];while(1){printf("*********************/n");printf("*** 1 姓名查找 ****/n");printf("*** 2 单个显示 ****/n");printf("*** 3 增加****/n");printf("*** 4 退出****/n");printf("*********************/n");printf("请输入您选择的操作:");gets(num);switch(*num){case '1':{head=search(head);//姓名查找print(head);}break;case '2':{head=display(head);//显示}break;case '3':{head=insert(head);//增加print(head);}break;case '4':return head;default:printf("操作错误,此项不存在!/n");break;}if(strcmp(num,"6")==0)break;}return head; } //主函数 void main() {struct address_list *head=NULL;char num[10];printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/n");printf("*=*程序说明*=*/n");printf("*=* 请及时保存创建完毕的通讯录内容! *=*/n");printf("*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/n");while(1){printf("************************/n");printf("*** 1 创建通讯录 ****/n");printf("*** 2 按名字排序 ****/n");printf("*** 3 综合操作 ****/n");printf("*** 4 保存****/n");printf("*** 5 打开****/n");printf("*** 6 删除****/n");printf("*** 7 退出****/n");printf("************************/n");printf("请输入您选择的操作:");gets(num);switch(*num){case '1':{if(head==NULL){head=creat();//创建print(head);}else{head=shifang(head);head=creat();//重新创建print(head);}}break;case '2':{head=paixu(head);//排序}break;case '3':{head=menu(head);//综合操作}break;case '4':{save(head);//文件保存print(head);}break;case '5':{head=load(head);//文件输出}break;case '6':{head=delete_txl(head);//删除print(head);}break;case '7':head=shifang(head);break;default:printf("操作错误,此项不存在!/n");break;}if(strcmp(num,"7")==0)break;} }REC码友部落

歌厅歌曲管理系统REC码友部落
REC码友部落

#include "stdlib.h" #include "stdio.h" #define MAX 100typedef struct {int s[MAX][MAX];//用二维数组存放教师专业特长int D[MAX]; //用一维数组存放安排的教学任务}MGraph; MGraph G; int creat(int *k,int n) //初始化,将二维数组s和一维数组D的adj全部赋值为0{int i,j;for(i=1;i<=n;i++){G.D[i]=0;k[i]=0;for(j=1;j<=n;j++)G.s[i][j]=0;}printf("/n");printf("科目数成功确定为 %d/n",n);return 1; }int techer_speciality(int n){int k,i;printf("请输入教师专业特长编号(1-%d) 0表示结束输入:/n",n);for(i=1;i<=n;i++){printf("输入教师编号为 %d 的特长专业号:",i);do{scanf("%d",&k);if(k>n){printf("超出范围,重新输入: ");continue;}elseG.s[i][k]=1;}while(k);}printf("设定成功!/n");;return 1;//设定成功!}int serch(int i,int j,int n){for(;j<=n;j++){if(G.s[i][j]==1)break;}return j;}int serch_error(int *k,int n)//在所有老师都有被进行安排过的情况下运行{int t,i,j;static int b=0; //b检测是否有两个或两个以上的专业只有一个老师可授for(j=1;j<=n;j++)if(k[j]==0) //存在有科目没有老师授课for(i=1;i<=n;i++) //哪个老师可以授此科目且此科目当前还没有老师授课if(G.s[i][j]==1){if(b!=i)b=i;elsereturn 0; //if(b!=i)b=i记录第一个没有授课的科目但有老师可以授课的老师下标//若再次运行这个函数且另一个没有授课的科目也是这位老师可授,即有//多个科目只有此老师可授,即调用此函数的老师没有科目可授。t=G.D[i];if(G.D[i]==0)return 0; //可能有后面老师还没受到安排,返回等所有老师都有被进行安排过才进行G.D[i]=j;k[j]=i;k[t]=0;return 1;//有,让此老师授此课,原来所授的课取消,重新安排过。}return 0; //(没有科目没有被安排)或者(有科目没有被安排但没有老师有此专长)} int anpai(int *k,int n){int c[MAX]={0},i,j, js, p=0,t;for(i=1;i<=n;i++){if(G.D[i]==0){j=1;while(1){js=serch(i,j,n);if(js<=n){c[p++]=js;//保存从serch里返回的教师专长if(k[js]<=0){G.D[i]=js;k[js]=i;p=0;break;}else{j=js;j++;}}else{p=0;t=k[c[p]];j=c[p]+1;while(1){js=serch(t,j,n);if(k[js]<=0 && js<=n){k[c[p]]=0; G.D[t]=js; k[js]=t; G.D[i]=c[p]; k[c[p]]=i; p=0; break;}else if(js<=n)j++;else{p++;if(c[p]==0){G.D[i]=0;if(serch_error(k,n))anpai(k,n);break;}t=c[p];j=c[p]+1;}}break;}}}}printf("教师专长课程设定成功!/n");return 1; }void display(int n){int ch,i;printf(" 教师编号课程编号/n");for(i=1;i<=n;i++)printf("%5d %13d/n",i,G.D[i]);}void list(int n){int i,j;for (i=1;i<=n;i++){printf("%3d号教师的专业特长有:",i);for(j=1;j<=n;j++)if (G.s[i][j])printf("%3d/n",j);printf("/n");}}void edit(int n){int k,i=0,m=0,j=0;printf("请输入要修改的老师:");while(i==0||i>n){scanf("%d",&i);if(i>0 && i<=n)printf("第%d个老师的专长科目有: ",i);elseprintf("没这个老师!请重新输入:/n");}for(k=1;k<=n;k++){if(G.s[i][k]==1){printf("%3d/n",k);j++;}}if(j==0)printf("没有专长科目/n");printf("/n输入你要修改的科目(输入0结束):/n");do{scanf("%d",&k);if(k>n){printf("超出范围,重新输入: ");continue;}else if(G.s[i][k]==1)G.s[i][k]=0;else G.s[i][k]=1;}while(k);printf("修改后第%d个老师的专长科目有 :",i);for(k=1;k<=n;k++){if(G.s[i][k]==1){printf("%3d/n",k);m++;}}if(m==0)printf("没有专长科目/n");printf("/n"); } int main(void){int k[MAX],ch,i=0, n=0,w=0,a=0;//n为0 用来表示还没 i 检查是否专长课程设定 w 检查是否科目数设定 a检查是否课程安排char cx;while(1){printf(" ┏━━━━━━━━欢迎进入教学任务安排系统━━━━━━━━┓/n");printf(" § §/n");printf(" § 1 -----确定科目数 2 -----教师专长课程设定 §/n");printf(" § 3 -----课程安排 4 -----教师专长浏览 §/n");printf(" § 5 -----教师专长课程修改 6------查看教学任务安排 §/n");printf(" § 0 -----退出系统 §/n");printf(" └────────────────────────────┘/n");printf("请选择功能 ");scanf("%d",&ch);printf("/n");switch(ch){case 1:{if(!w){printf("请确定课程数或教师人数 ");scanf("%d",&n);w=creat(k, n);break;} //初始化else{printf("你已经确定了课程数 ,是否要从新确定(是:Y/y 否:其余键 )");scanf("%c",&cx);if(cx=='Y'|| cx=='y'){printf(" 重新输入课程数: ");scanf("%d",&n);w=creat(k, n);break;}else break;}}case 2:{if (!w)printf("请先确定科目数!/n/n");else if(i){printf("你已经教师专长课程设定 ,是否要从新设定(是:Y/y 否:其余键 )");scanf("%c",&cx);if(cx=='Y'|| cx=='y'){i=techer_speciality(n);break;}else break;}elsei=techer_speciality(n);break;}case 3:{if (!w)printf("请先确定科目数!/n/n");else if(!i)printf("请先教师专长课程设定!/n");elseanpai(k,n);break;}case 4:{if (!w)printf("请先确定科目数和 教师专长课程设定!/n/n");else if(!i)printf("请先教师专长课程设定!/n");elselist(n);//教师专长浏览函数break;}case 5:{if (!w)printf("暂无确定科目数!/n");else if(!i)printf("教师专长课程暂无设定/n"); //教师专长课程修改函数elseedit(n) ; //修改函数break;}case 6:{if (!w)printf("请先确定科目数!/n/n");else if(!i)printf("请先教师专长课程设定!/n"); //查看教学任务安排函数else if (!a)printf("请先选择课程安排!/n");else ;//查看教学任务安排函数;break;}case 0:{printf(" ************** 谢谢使用 ************/n");return ;}default:printf("从新选择功能:/n");}}system("pause");return 0; } REC码友部落