吉林大学2013级大一下学期程序设计作业:同学通讯录系统
来源:互联网 发布:云免软件下载 编辑:程序博客网 时间:2024/05/17 02:24
《程序设计基础课程设计》题目(2013级)
1、内容简介
编写一个C语言程序,实现同学通讯录管理功能。其中:
1)至少能够管理50位同学的个人信息和通讯信息,个人信息和通讯信息需要有较强的纠错功能(重点考察)。
2)个人信息包括:学号(53开头的实际学号8位),姓名(至少可以保存4个汉字或8个英文字母),性别,年级班级(可选项,学号中包含相关信息),行政职务(班长、学委、无)。
3)通讯信息包括:主要手机号(11位),其它手机号(11位),邮箱(30个字符以内的字符串,必须包含一个且只包含一个@字符)。
注:存在重复手机号,即多位同学存储了相同的手机号;邮箱除@字符外其它格式不限定。
具体功能要求如下:
1)【增加】能够从多个文件(学生自己提前生成2个文件备用)中录入多位同学的相关信息(全部信息或部分信息),也能够随时增加1位新同学的相关信息(全部信息或部分信息)。需要考虑各种类型的不规范或错误数据(重点考察),尽可能考虑重复同学的处理(同一文件多次重复录入,录入文件中同学与系统已有同学重复,增加同学与系统已有同学重复)。
2)【修改】能够随时修改1位同学的相关信息,包括:对已录入的信息进行修改或删除、对未录入的信息进行添加。
3)【删除】能够随时删除1位同学的所有信息。
4)【存储】能够将当前系统中的所有信息保存到文件中。
5)【某位同学信息】能够打印某位同学(按照姓名或手机号查找)的所有相关信息。
6)【某个班级信息】能够按照学号顺序打印某班同学的所有相关信息(可选)。
7)【班级干部信息】能够输出所有班级干部的相关信息,要求用链表实现(重点考察)。
8)【全部信息】能够按照学号顺序打印系统中所有同学的信息。
9)【关联信息】能够打印所有包含相同手机号的同学信息,要求用链表实现(重点考察)。
10)【其它功能】你认为有用的附加功能,可酌情添加。
2、课程设计要求
按照指导教师的要求进行分组和任务分工,完成指定任务。具体要求如下:
1)保证出勤和纪律,服从指导教师的安排。
2)每组不超过3人,每组提交1份实验报告,明确标明成员的任务分工和完成情况。
3)所提交的C语言源程序需要含有必要的代码注释和1份独立的程序说明文档。
4)指导教师按照平时考核、代码和实验报告质量、任务分工和完成比例、界面美观和人性化、个人和团队答辩情况等环节综合评定最终成绩。
3、成绩说明
五分制:优秀15%-20%,良好35%-40%;中等25%-30%;及格和不及格10%-15%。
迟到/早退1次,最高成绩为良好;
旷课1次,或迟到/早退2次,最高成绩为中等;
旷课1次且迟到/早退1次,或迟到/早退3次,最高成绩为及格;
旷课2次,或旷课1次且迟到/早退2次,或迟到/早退4次,取消答辩资格。
4、参考测试示例
学号:53开头的8位,8位但非53开头,8位含有其它非数字符号,不足8位,超过8位。
姓名:汉语、英文,过长(如20个字符),其它特殊字符。
性别:男,女,不详。
年级班级:各种表示形式均可,1个或2个字段,但建议数字形式便于输入和存储。
行政职务:至少包含班长、学委,也可扩展其它职务。
手机号:符合常识,138-0431-0519(多2个-),13804310519(正确),0013804310519(多前导0),138 05190159(多个空格),1380519051(少1位)。
邮箱:一个字符串(不含@),含有@(正确),一个字符串(含有2个@)。
/*********************************************************************************************************************************************************************************/
操作附图
1.第一次登陆:
2.选择添加信息.
3.添加信息
4.转到初始功能选择界面
5.查询服务界面(这里选择5 ---全部查询)
6.查询结果:
7.修改服务:
8.修改年级:
9.单人信息查询:
10..删除服务:
11.密码服务:
12.重新登录时验证密码:
/**********************************************************************************************************************************************************************************/
完成代码如下:
#include <cstdio>#include <cstring>#include <windows.h>typedef long long ll;//由于VC6不支持long long 在使用VC时把 long long 改成 int64struct student{ //个人信息 int id; char name[10]; int sex;// 1男 2女 0未知 int Grade,Class; int Duty;// 0无 1班长 2学委 //通讯信息 ll phone1,phone2;//电话 这里用ll 是因为电话号有11位 char email[35];};/*********************主要函数声明************************/int Load(char *inf,student *p);//从文件中读取信息并储存在p中int Add(int x,int y,student *p);//添加 返回添加的人数int Change(int x,int y,student *p);//修改(在x~y的范围内对p进行查找操作 然后修改 下同) 返回添加的人数int Delete(int x,int y,student *p);//删除 返回添加的人数(***一个负整数***)void Store(int x,int y,student *p,char *inf);//储存void Printinf(student p);//打印单个人的全部信息(可视)void print(student p);//打印单人信息(不可视)void fprint(student p,FILE*f);//打印单人信息(不可视)void Personinf(int x,int y,student *p);//搜索并打印单人信息void Classinf(int x,int y,student *p);//班级信息void Dutyinf(int x,int y,student *p);//班委信息void Allinf(int x,int y,student *p);//全部信息void Relinf(int x,int y,student *p);//关联信息void makepassword();//创建或修改密码ll getpass(char *ch);bool is_password();bool is_pass(char *ch);//这里补充其他功能/************************END-主要函数声明*************************//*****************数据存储文件格式说明***************************///数据储存在 .txl 的文件格式中//存储用的 .txl文件名为 base.txl//base.txl文件的格式如下//第一行一个整数 n 代表通讯录中现有的同学数量//接下来每组数据有9*n行 如下//学号(53开头8位)//姓名(最多9位有效字符(4个汉字)无特殊符号)//性别(0或1或2)//年级(正整数)//班级(正整数)//职务(0、1、2)//主要手机号(11位 1开头的正整数)//其他手机号(同上)//电子邮箱(英文字符串只含一个@符)////例://1//53131001//陶罗//1//1//10//0//12312312312(不存在填0)//13213213212(不存在填0)//123456789@qq.com(不存在填0)////其他用于录入信息的文件.txl格式文件如下//第一行一个整数 n 代表通讯录中现有的同学数量//接下来每组数据有9*n行 如下//学号(一行数据或0(代表未知))//姓名(一行数据或空行)//性别(0或1或2)//年级(一个正整数或0)//班级(一个正整数或0)//职务(0或1或2)(0表示未知或无)//主要手机号(一行数据或0)//其他手机号(一行数据或0)//电子邮箱(一行数据或0)/**注意 base.txl只允许系统登录时读取 禁止用户读取**//*********************END-数据存储文件格式说明***************************//*************************main及其相关函数********************************/const int maxn=1000+10;//最多100人char base[10]="base";/**注意:base在系统第一次读取时就已经转换为"base.txl"**/void Search(int x,int y,student *p);//查询与检索操作int Operate(int x,int y,student *p);//修改与添加操作void Others(int x,int y,student *p);//其他服务void print(student p){ printf("%d\n",p.id); printf("%s",p.name); if(p.name[strlen(p.name)-1]!='\n')putchar('\n'); printf("%d\n%d\n%d\n%d\n",p.sex,p.Grade,p.Class,p.Duty); printf("%lld\n%lld\n",p.phone1,p.phone2); printf("%s",p.email); if(p.email[strlen(p.email)-1]!='\n')putchar('\n');}void fprint(student p,FILE*f){ fprintf(f,"%d\n",p.id); fprintf(f,"%s",p.name); if(p.name[strlen(p.name)-1]!='\n')fprintf(f,"\n"); fprintf(f,"%d\n%d\n%d\n%d\n",p.sex,p.Grade,p.Class,p.Duty); fprintf(f,"%lld\n%lld\n",p.phone1,p.phone2); fprintf(f,"%s",p.email); if(p.email[strlen(p.email)-1]!='\n')fprintf(f,"\n");}int input(int x,int y){ char ch[50]; gets(ch); if(strlen(ch)!=1)return -1; if(ch[0]-'0'>=x&&ch[0]-'0'<=y)return ch[0]-'0'; return -1;}void END(){ puts("---------------------------------------------------------------"); puts("---------------------------- ---------------------------------"); puts("----------------------------感---------------------------------"); puts("---------------------------- ---------------------------------"); puts("----------------------------谢---------------------------------"); puts("---------------------------- ---------------------------------"); puts("----------------------------您---------------------------------"); puts("---------------------------- ---------------------------------"); puts("----------------------------的---------------------------------"); puts("---------------------------- ---------------------------------"); puts("----------------------------使---------------------------------"); puts("---------------------------- ---------------------------------"); puts("----------------------------用---------------------------------"); puts("---------------------------------------------------------------"); getchar();getchar();}int main(){ system("color 1A"); char pas[20]; while(is_password()) { puts("请输入密码"); scanf("%s",pas); getchar(); if(is_pass(pas))break; else { puts("密码错误 请从新输入"); continue; } } system("cls"); puts("---------------------------------------------------------------"); puts("------------欢 迎 来 到 同 学 通 讯 录 管 理 系 统-------------"); puts("---------------------------------------------------------------"); student stu[maxn]; int num=0; num=Load(base,stu); while(num==0) { puts(""); puts("检测到第一次登录系统或系统中没有信息\n 是(1)否(0)添加信息?"); int key; key=input(0,1); if(key==1) num+=Add(1,num,stu); else if(key==-1) continue; else { system("cls"); break; } } while(1) { printf("当前系统人数:%d\n",num); puts("----------------请输入数字选择功能---------------"); puts(" 1.查询服务 2.添加或修改 3.其他服务 0.退出程序 "); int key; key=input(0,3); if(key==0) {system("cls");break ;} else if(key==1) Search(1,num,stu); else if(key==2) num=Operate(1,num,stu); else if(key==3) Others(1,num,stu); else if(key==-1)continue; } END();}void Search(int x,int y,student *p){ while(1) { system("cls"); puts("---------------------------------------------------------------"); puts("------------------------- 查 询 服 务 -------------------------"); puts("---------------------------------------------------------------"); puts(""); puts("请输入想要查询的内容"); puts("1.某位同学信息"); puts("2.某个班级信息"); puts("3.班级干部信息"); puts("4.关联信息"); puts("5.全部信息"); puts("0.返回上一层"); int key; key=input(0,5); if(key==0) {system("cls");break ;} else if(key==1) Personinf(x,y,p); else if(key==2) Classinf(x,y,p); else if(key==3) Dutyinf(x,y,p); else if(key==4) Relinf(x,y,p); else if(key==5) Allinf(x,y,p); else if(key==-1)continue; }}int Operate(int x,int y,student *p){ while(1) { system("cls"); puts("---------------------------------------------------------------"); puts("-------------------------修改与添加服务------------------------"); puts("---------------------------------------------------------------"); puts("请输入想要的操作(操作1、2、3后请进行操作4)"); puts("1.添加个人全部信息"); puts("2.修改或添加个人的部分信息"); puts("3.删除个人信息"); puts("4.储存当前系统中的所有信息"); puts("0.返回上一层"); int key; key=input(0,4); if(key==0) {system("cls");break ;} else if(key==1) y+=Add(x,y,p); else if(key==2) y+=Change(x,y,p); else if(key==3) y+=Delete(x,y,p); else if(key==4) Store(x,y,p,base); else if(key==-1)continue; } return y-x+1;}void Others(int x,int y,student *p){ system("cls"); puts("---------------------------------------------------------------"); puts("------------------------- 其 他 服 务 -------------------------"); puts("---------------------------------------------------------------"); while(1) { puts("1.为系统设定密码或修改密码 0.返回上一层"); int key; key=input(0,1); if(key==0) {system("cls");return;} else if(key==1) { makepassword(); system("cls"); } else if(key==-1)continue; }}/*************************END-main及其相关函数********************************//*************************主要函数实现***************************************//**1.Load**/void Corerr(char *inf);//文件修正函数int Load(char *inf,student *p){ strcat(inf,".txl"); if(strcmp(inf,"base.txl")) Corerr(inf); FILE* in=fopen(inf,"r"); if(!in) { if(strcmp(inf,"base.txl")) puts("打开文件失败"); return 0; } int num; fscanf(in,"%d",&num); for(int i=1;i<=num;i++) { fscanf(in,"%d",&p[i].id); fgets(p[i].name,10,in);//读空行 fgets(p[i].name,10,in); fscanf(in,"%d%d%d%d",&p[i].sex,&p[i].Grade,&p[i].Class,&p[i].Duty); fscanf(in,"%lld%lld",&p[i].phone1,&p[i].phone2); fgets(p[i].email,35,in);//读空行 fgets(p[i].email,35,in); } fclose(in); return num;}void delpla(char *ch)// 删除字符串中的空格{ char ret[100]; int j=0; for(int i=0;i<strlen(ch);i++) if(ch[i]!=' ') ret[j++]=ch[i]; for(int i=0;i<j;i++) ch[i]=ret[i];}void Corerr(char *inf){ FILE*in=fopen(inf,"r"); student p[maxn]; int num; fscanf(in,"%d",&num); char tes[55]; fgets(tes,50,in); //printf("%s\n",tes); if(num>=maxn) num=0; for(int i=0;i<num;i++) { //学号 fgets(tes,50,in); tes[strlen(tes)-1]=0;//删去读取的回车 下同 for(int i=0;i<strlen(tes);i++) if(tes[i]<'0'||tes[i]>'9') { strcpy(tes,"0"); printf("第%d个同学学号错误,已更改为0,请用修改功能修改\n",i+1); getchar(); } sscanf(tes,"%d",&p[i].id); if(p[i].id/1000000!=53)p[i].id=0; //姓名 fgets(tes,50,in); tes[strlen(tes)-1]=0; if(strlen(tes)>9)strcpy(tes,"0"); for(int i=0;i<strlen(tes);i++) if(!((tes[i]>='a'&&tes[i]<='z')||(tes[i]>='A'&&tes[i]<='Z')||tes[i]<0))//存在特殊符号 { strcpy(tes,"0"); printf("第%d个同学姓名错误,已更改为0,请用修改功能修改\n",i+1); getchar(); } strcpy(p[i].name,tes); //性别 fgets(tes,50,in); tes[strlen(tes)-1]=0; if(tes[0]>='0'&&tes[0]<='2')p[i].sex=tes[0]-'0'; else p[i].sex=0; //年级 班级 fgets(tes,50,in); tes[strlen(tes)-1]=0; for(int i=0;i<strlen(tes);i++) if(tes[i]<'0'||tes[i]>'9') { strcpy(tes,"0"); printf("第%d个同学年级错误,已更改为0,请用修改功能修改\n",i+1); getchar(); } sscanf(tes,"%d",&p[i].Grade); fgets(tes,50,in); tes[strlen(tes)-1]=0; for(int i=0;i<strlen(tes);i++) if(tes[i]<'0'||tes[i]>'9') { strcpy(tes,"0"); printf("第%d个同学班级错误,已更改为0,请用修改功能修改\n",i+1); getchar(); } sscanf(tes,"%d",&p[i].Class); //职务 fgets(tes,50,in); tes[strlen(tes)-1]=0; if(tes[0]>='0'&&tes[0]<='2') p[i].Duty=tes[0]-'0'; else p[i].Duty=-1; //手机号1 fgets(tes,50,in); tes[strlen(tes)-1]=0; if(tes[3]=='-'&&tes[8]=='-') { for(int i=3;i<7;i++)tes[i]=tes[i+1]; for(int i=7;i<11;i++)tes[i]=tes[i+2]; } delpla(tes); tes[11]=0; sscanf(tes,"%lld",&p[i].phone1); if(p[i].phone1/10000000000!=1) { p[i].phone1=0; printf("第%d个同学主要手机号错误,已更改为0,请用修改功能修改\n",i+1); getchar(); } //手机号2 fgets(tes,50,in); tes[strlen(tes)-1]=0; if(tes[3]=='-'&&tes[8]=='-') { for(int i=3;i<7;i++)tes[i]=tes[i+1]; for(int i=7;i<11;i++)tes[i]=tes[i+2]; } delpla(tes); tes[11]=0; sscanf(tes,"%lld",&p[i].phone2); if(p[i].phone2/10000000000!=1) { p[i].phone2=0; printf("第%d个同学其他手机号错误,已更改为0,请用修改功能修改\n",i+1); getchar(); } //E-mail fgets(tes,50,in); tes[strlen(tes)-1]=0; int is=0; for(int i=0;i<strlen(tes);i++) if(tes[i]=='@')is++; if(is!=1) { strcpy(p[i].email,"0"); printf("第%d个同学电子邮箱错误,已更改为0,请用修改功能修改\n",i+1); getchar(); } else strcpy(p[i].email,tes); } fclose(in); FILE*out=fopen(inf,"w"); fprintf(out,"%d\n",num); for(int i=0;i<num;i++) { fprintf(out,"%d\n",p[i].id); fprintf(out,"%s\n",p[i].name); fprintf(out,"%d\n%d\n%d\n%d\n",p[i].sex,p[i].Grade,p[i].Class,p[i].Duty); fprintf(out,"%lld\n%lld\n",p[i].phone1,p[i].phone2); fprintf(out,"%s\n",p[i].email); } fclose(out); return ;}/**END-Load**//**2.Add**/bool isrep(int x,int y,student *p,student q)//无重复返回1{ for(int i=x;i<=y;i++) { if(p[i].id==q.id&&q.id!=0)return 0; if(q.id==0&&!strcmp(p[i].name,q.name))return 0; } return 1;}int Add1(int x,int y,student *p,char * inf) //文件添加{ student add[maxn]; int num=Load(inf,add); int ret=0; for(int i=1;i<=num;i++) { if(isrep(x,y,p,add[i])) { p[++y]=add[i]; ret++; } } system("cls"); return ret;}int Add2(int x,int y,student *p)//屏幕上添加{ char ch[50]; FILE*sto=fopen("regsto.txl","w"); fputs("1\n",sto); //getchar(); puts("请输入学号,未知请填0"); gets(ch); fputs(ch,sto); fputs("\n",sto); puts("请输入姓名(不含空格),未知请填0"); gets(ch); fputs(ch,sto); fputs("\n",sto); puts("请输入性别 0.不详 1.男 2.女"); gets(ch); fputs(ch,sto); fputs("\n",sto); puts("请输入年级(一个整数)"); gets(ch); fputs(ch,sto); fputs("\n",sto); puts("请输入班级(一个整数)"); gets(ch); fputs(ch,sto); fputs("\n",sto); puts("请输入职务(0.无 1.班长 2.学委)"); gets(ch); fputs(ch,sto); fputs("\n",sto); puts("请输入主要电话号"); gets(ch); fputs(ch,sto); fputs("\n",sto); puts("请输入其他电话号"); gets(ch); fputs(ch,sto); fputs("\n",sto); puts("请输入电子邮箱"); gets(ch); fputs(ch,sto); fputs("\n",sto); fclose(sto); char str[20]="regsto"; return Add1(x,y,p,str);}int Add(int x,int y,student *p){ system("cls"); puts("请输入添加方式 1.文件录入 2.手写录入 0.返回上一层"); int key; key=input(0,2); system("cls"); if(key==1) { puts("---------------------------------------------------------------"); puts("------------------------ 文件添加服务 -------------------------"); puts("---------------------------------------------------------------"); char inf[100]; puts("请输入txl的文件名(不用加后缀):"); while(scanf("%s",inf),inf[0]=='\n'); getchar(); return Add1(x,y,p,inf); } else if(key==2) { puts("---------------------------------------------------------------"); puts("------------------------ 手写添加服务 -------------------------"); puts("---------------------------------------------------------------"); return Add2(x,y,p); } else if(key==0) { system("cls"); return 0; }}/**END-Add**//**3.Change**/int Searchid(int x,int y,student *p,int id);int Searchname(int x,int y,student *p,char *name);int Change(int x,int y,student *p){ bool cont=1; int ret=0; while(cont) { system("cls"); puts("---------------------------------------------------------------"); puts("--------------------------- 修改服务 --------------------------"); puts("---------------------------------------------------------------"); puts("1.按学号查找并修改 2.按姓名查找并修改 0返回上一层"); int key=input(0,2); int loc; if(key==1) { system("cls"); puts("------------------------- 按学号修改 --------------------------"); puts("请输入要修改同学的学号"); int id; scanf("%d",&id); loc=Searchid(x,y,p,id); } else if(key==2) { system("cls"); puts("------------------------- 按姓名修改 --------------------------"); puts("请输入要修改同学的姓名"); char name[20]; scanf("%s",name); loc=Searchname(x,y,p,name); } else if(key==-1) { system("cls"); return -ret; } if(loc>=0) { puts("请连续输入想要修改项目的代号,代号间不需要插入回车或空格"); puts("1.学号 2.姓名 3.性别 4.年级 5.班级 6.职务"); puts("7.主要手机号 8.其他手机号 9.E-mail"); ll ky; scanf("%lld",&ky); getchar(); while(ky) { int poi=ky%10; ky/=10; if(poi==1) { puts("请输入新学号"); int nid; while(scanf("%d",&nid),nid/1000000!=53) puts("学号错误 请重新输入"); p[loc].id=nid; getchar(); } else if(poi==2) { puts("请输入新姓名"); char nname[50]; while(gets(nname),1) { if(strlen(nname)>9){puts("名字过长,请简写");continue;} for(int i=0;i<strlen(nname);i++) if(!((nname[i]>='a'&&nname[i]<='z')||(nname[i]>='A'&&nname[i]<='Z')||nname[i]<0)) { puts("含有非法字符 请检查并重新填写"); continue; } strcpy(p[loc].name,nname); break; } } else if(poi==3) { puts("请输入性别 0.不详 1.男 2.女"); int k; while(scanf("%d",&k),!(k>=0&&k<=2)) puts("请输入 0 或 1 或 2 "); p[loc].sex=k; getchar(); } else if(poi==4) { puts("请输入年级(一个正整数)"); int k; while(scanf("%d",&k)!=1) puts("请重新输入"); p[loc].Grade=k; //getchar(); } else if(poi==5) { puts("请输入班级(一个正整数)"); int k; while(scanf("%d",&k)!=1) puts("请重新输入"); p[loc].Class=k; getchar(); } else if(poi==6) { puts("请输入职务 0.无 1.班长 2.学委"); int k; while(scanf("%d",&k),!(k>=0&&k<=2)) puts("请输入 0 或 1 或 2 "); p[loc].Duty=k; getchar(); } else if(poi==7||poi==8) { puts("请输入新的手机号"); char tes[50]; gets(tes); if(tes[3]=='-'&&tes[8]=='-') { for(int i=3;i<7;i++)tes[i]=tes[i+1]; for(int i=7;i<11;i++)tes[i]=tes[i+2]; } delpla(tes); tes[11]=0; ll k; sscanf(tes,"%lld",&k); if(poi==7) { if(k/10000000000==1) p[loc].phone1=k; else puts("号码有误,请从新进入修改号码功能"); } else if(poi==8) { if(k/10000000000==1) p[loc].phone2=k; else puts("号码有误,请从新进入修改号码功能"); } } else if(poi==9) { puts("请输入新的E-mail"); char nem[50]; gets(nem); int ok=0; for(int i=0;i<strlen(nem);i++) if(nem[i]=='@') ok++; if(ok==1) strcpy(p[loc].email,nem); else puts("E-mail有误 请重新进入E-mail修改功能"); } } } else if(loc<0) { puts("不存在此人的信息 是(1)否(0)添加?选是将转到添加页面"); bool is; scanf("%d",&is); system("cls"); if(is) ret+=Add2(x,y,p); } puts("是否从新进入修改系统 0 否 1 是"); scanf("%d",&cont); } return ret;}int Searchid(int x,int y,student *p,int id){ for(int i=x;i<=y;i++) if(p[i].id==id)return i; return -1;}int Searchname(int x,int y,student *p,char *name){ for(int i=x;i<=y;i++) if(!strcmp(name,p[i].name))return i; strcat(name,"\n"); for(int i=x;i<=y;i++) if(!strcmp(name,p[i].name))return i; return -1;}/**END-Change**//**4.Delete**/int Delete(int x,int y,student *p){ int ret=0; while(1) { system("cls"); puts("---------------------------------------------------------------"); puts("------------------------- 删 除 服 务 -------------------------"); puts("---------------------------------------------------------------"); puts("1.通过学号查找并删除 2.通过姓名查找并删除 0.返回上一层"); int key,loc; key=input(0,2); if(key==1) { puts("请输入学号"); int did; scanf("%d",&did); loc=Searchid(x,y,p,did); } else if(key==2) { puts("请输入同学的姓名"); char name[20]; scanf("%s",name); loc=Searchname(x,y,p,name); } else if(key==0||key==-1)return -ret; if(loc<0)puts("不存在该学生"); else { puts("是(1)否(0)确认删除?"); Printinf(p[loc]); scanf("%d",&key); if(key) { for(int i=loc;i<y;i++) p[i]=p[i+1]; //前移 y--;//去尾 ret++;//返回值+1 } } puts("是(1)否(0)继续删除?"); scanf("%d",&key); system("cls"); if(key==1)continue; else return -ret; } return -ret;}/**END-Delete**//**5.Store**/void Store(int x,int y,student *p,char *inf){ puts("储存数据中 请稍后······"); FILE*f=fopen(inf,"w"); fprintf(f,"%d\n",y-x+1); for(int i=x;i<=y;i++) { fprint(p[i],f); } fclose(f); puts("数据储存完毕! 请按任意键返回上一层"); getchar(); system("cls");}/**END-Store**//**6.Printinf**/void Printinf(student p){ if(p.id!=0) printf("学号 : %d\n",p.id); if(p.name[0]!='0') { printf("姓名 : %s",p.name); if(p.name[strlen(p.name)-1]!='\n')putchar('\n'); } printf("性别 : "); if(p.sex==0)printf("不详\n"); else if(p.sex==1)printf("男\n"); else if(p.sex==2)printf("女\n"); if(p.Grade&&p.Class) printf("班级 : %d 年 %d 班\n",p.Grade,p.Class); printf("职务 : "); if(p.Duty==0)printf("无\n"); else if(p.Duty==1)printf("班长\n"); else if(p.Duty==2)printf("学委\n"); if(p.phone1) printf("主要手机号 : %lld\n",p.phone1); if(p.phone2) printf("其他手机号 : %lld\n",p.phone2); if(p.email[0]!='0') { printf("E-mail : %s",p.email); if(p.email[strlen(p.email)-1]!='\n')putchar('\n'); } puts("------------------------------------------------------");}/**7.Personinf**/void Personinf(int x,int y,student *p){ system("cls"); puts("---------------------------------------------------------------"); puts("------------------------ 个人信息查询 -------------------------"); puts("---------------------------------------------------------------"); puts("请入查询方式"); puts("1.学号 2.姓名 3.电话号 0.返回上一层"); int loc,key; scanf("%d",&key); if(key==0)return; else if(key==1) { puts("请输入学号"); int sid; scanf("%d",&sid); loc=Searchid(x,y,p,sid); } else if(key==2) { puts("请输入姓名"); char name[20]; scanf("%s",name); loc=Searchname(x,y,p,name); } if(key==1||key==2) { if(loc>=0) Printinf(p[loc]); else puts("未找到该同学"); } if(key==3) { puts("请输入手机号"); ll sp; bool is=0; scanf("%lld",&sp); for(int i=x;i<=y;i++) if(p[i].phone1==sp||p[i].phone2==sp) {Printinf(p[i]);is=1;} if(!is)puts("未找到该同学"); } puts("按任意键返回上一层(注意 返回上一层会清屏)"); getchar();getchar(); system("cls"); return ;}/**END-Personinf**//**8.Classinf**/bool cmp(student a,student b){ if(a.Grade!=b.Grade) return a.Grade>b.Grade; else if(a.Class!=b.Class) return a.Class<b.Class; else return a.id<b.id;}void swap(student &a,student &b){student t=a;a=b;b=t;}void sort(int x,int y,student *p,bool cmp(student ,student)){ bool flag=1; while(flag) { flag=0; for(int i=x;i<y;i++) if(!cmp(p[i],p[i+1])) { swap(p[i],p[i+1]); flag=1; } }}void Classinf(int x,int y,student *p){ system("cls"); puts("---------------------------------------------------------------"); puts("------------------------ 班级信息查找 -------------------------"); puts("---------------------------------------------------------------"); sort(x,y,p,cmp); puts("请输入想要查找的年级"); int g,c; scanf("%d",&g); puts("请输入查找的班级"); scanf("%d",&c); bool is=0; for(int i=x;i<=y;i++) if(p[i].Grade==g&&p[i].Class==c) {Printinf(p[i]);is=1;} if(!is)puts("未找到该班级学生"); puts("按任意键返回上一层(会清屏)"); getchar();getchar(); system("cls");}/**END-Classinf**//**9.Allinf**/bool cmpid(student a,student b){ return a.id<b.id;}void Allinf(int x,int y,student *p){ system("cls"); puts("---------------------------------------------------------------"); puts("------------------------- 全 部 信 息 -------------------------"); puts("---------------------------------------------------------------"); sort(x,y,p,cmpid); for(int i=x;i<=y;i++) Printinf(p[i]); puts("按任意键返回上一层(会清屏)"); getchar(); system("cls");}/**END-ALLinf**//**10.Dutyinf**/void Dutyinf(int x,int y,student *p){ system("cls"); puts("---------------------------------------------------------------"); puts("------------------------- 班 委 查 询 -------------------------"); puts("---------------------------------------------------------------"); int next[maxn];//静态链表 next表示当前班委下一个班委的坐标 int j=0; next[j]=-1; for(int i=x;i<=y;i++) { if(p[i].Duty) { next[j]=i; j=i; next[j]=-1; } } int k=0; while(next[k]>=0) { Printinf(p[next[k]]); k=next[k]; } puts("按任意键返回上一层(会清屏)"); getchar(); system("cls");}/**END-Dutyinf**//**11.Relinf**/void phorep(int x,int y,student *p,ll phone,int next[])//判断是否存在与当前学生相同的电话号码 next 静态链表的坐标表{ memset(next,0,sizeof(next)); next[0]=-1; int j=0; for(int i=x;i<=y;i++) { if(phone==p[i].phone1||phone==p[i].phone2) { next[j]=i; j=i; next[j]=-1; } }}bool repphone(ll *num,int n,ll phone){for(int i=0;i<n;i++)if(phone==num[i])return 1;return 0;}void Relinf(int x,int y,student *p){ system("cls"); puts("---------------------------------------------------------------"); puts("------------------------- 关 联 信 息 -------------------------"); puts("---------------------------------------------------------------"); ll phone[maxn*2]; int num=0; for(int i=x;i<=y;i++) { if(!repphone(phone,num,p[i].phone1)) { phone[num++]=p[i].phone1; } if(!repphone(phone,num,p[i].phone2)) { phone[num++]=p[i].phone2; } } for(int i=0;i<num;i++) { int next[maxn]; phorep(x,y,p,phone[i],next); if(next[next[0]]==-1)continue;//若只有一个人有此号码 则不输出 else { printf("存有号码 %lld 同学有\n",phone[i]); puts("------------------------------------------------------"); int k=0; while(next[k]>=0) { Printinf(p[next[k]]); k=next[k]; } puts("------------------------------------------------------"); } } puts("按任意键返回上一层(会清屏)"); getchar(); system("cls");}/**END-Relinf**//**12.password**/int pasnum[20]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536};ll getpass(char *ch){ if(!strcmp(ch,"0"))return 0; ll ret=0; for(int i=0;i<strlen(ch);i++) { ret+=ch[i]*pasnum[i%17]; ret%=1000000007; } return ret;}void makepassword(){ FILE*pass=fopen("data.pas","w"); char pas[20]; system("cls"); puts("---------------------------------------------------------------"); puts("----------------------- 密码添加或修改 ------------------------"); puts("---------------------------------------------------------------"); puts("请输入密码 不超过17位 不含空格和回车或制表符\n 删除密码请输入0"); while(scanf("%s",pas),strlen(pas)>17); ll password=getpass(pas); fprintf(pass,"%lld\n",password); fclose(pass); puts("密码修改完成 任意键退出"); getchar();getchar(); system("cls");}bool is_password(){ FILE*pass=fopen("data.pas","r"); if(!pass)return 0; int k; fscanf(pass,"%d",&k); if(k==0) return 0; return 1;}bool is_pass(char *ch){ FILE*pass=fopen("data.pas","r"); ll k; fscanf(pass,"%lld",&k); if(k==getpass(ch)) return 1; return 0;}/**END-password**/
- 吉林大学2013级大一下学期程序设计作业:同学通讯录系统
- 第一次面向对象程序设计作业-大一下学期的自我目标
- 2013级大一下学期学习c++心得
- 大一下学期!
- 大一下学期总结
- 大一下学期+暑假
- 大一下学期课程设计
- 学期小结2:大一下学期
- 大一下学期...怎么安排?
- 大一下学期的总结
- 大一下学期暑假任务
- 大一下学期前半段总结
- 大一下学期期中总结
- 2014大一下学期总结
- 大一下学期理想规划
- 大一下学期C++总结
- 大一下学期三月份学习总结
- 大一下学期复习期中考
- uva 825 Walking on the Safe Side(dp)
- source insight设置tab键为4个空格
- java的学习记录6
- map用法
- [快捷工具] windows下批量删除空目录的简单方法
- 吉林大学2013级大一下学期程序设计作业:同学通讯录系统
- matlab中记录程序运行时间
- poj 3623 Best Cow Line, Gold (题意和3617一样只要代码中的范围改一下)
- Java Web开发Basic(四) JSON
- 冒泡算法
- web.xml 中的listener、 filter、servlet 加载顺序及其详解
- js 解析json
- 碰撞检测
- [转]Linux下C开发——gcc,gdb的使用