科学论文的查重

//创用头文件模块创用. h

const int MaxLen = 200//最多可存储200条联系信息。

char fName[20]= " tel . dat ";//磁盘文件:通讯簿文件名

int Len//全局变量,通讯簿中当前联系人的总数

//1.通讯录数据结构的设计

typedef结构电话

{

char name[20];//名称

int组;//组:1。老友记2。同事3。家庭4。其他人

char之家[15];//家庭电话

char手机[15];//手机

char email[20];//电子邮件

char add[20];//地址

char memo[20];//备注

}电话;

//指针数组结构,用于排序。

typedef结构索引

{

int len//数组长度

tel * tel[MaxLen];//指针数组,

}指数;

//显示模块xuanshi.cpp

作废清单(电话tel[],索引lianx ren);//根据lianxren中指针数组的排序显示所有联系人。

void大营标投(void);//打印标题

void大赢标威(void);//打印页脚

void PrintOne(Tel r,int I);//只打印一个序号为I的联系人R的信息。

作废打印(电话号码);//打印页眉和联系人信息。

void阴环();//欢迎界面

int菜单(void);//主菜单,显示一级菜单:查看通讯录(1)、更新通讯录(2)、备份通讯录(3)、退出(0)。

int menu 2(void);//更新通讯录子菜单,显示:添加联系人(21),编辑联系人(22),删除联系人(23),返回主菜单(20)。

//文件处理模块wenjiancl.cpp

void New(电话电话[],索引* lianx ren);//添加联系人。添加到数组中的第一个空位置。之后,你需要重新排序

void Edit(Tel tel[],Index * lianx ren);//编辑联系人。需要重新订购

void Delete(Tel tel[],Index * lianx ren);//删除联系人。逻辑删除,只把名字赋给空字符串。删除后需要重新排序。

void输入(Tel *r,Tel tel[],int menu);//输入联系人的信息,通过菜单识别:添加(11)或修改(13)。

int chongcha(char *name,Tel tel[],char * original);//检查重量。在添加或编辑员工之前,请检查是否有重复的姓名。

int Select();//选择触点序列号,以免出错。

int Load(Tel tel[],Index * lianx ren);//读取。将地址簿文件fName读入内存。分类

int Save(Tel Tel[]);//保存。以fName(全局变量)的名称将地址簿保存到磁盘。此时执行物理删除:带有空字符串的联系人表示该联系人已被删除,不会存储在地址簿文件中。

int Copy(void);//备份通讯录。复制地址簿文件。

void pingypaix(电话[],索引* lianx ren);//按声音顺序排序。

void Xuan paixi(Index * p);//选择指针数组的排序

//主文件模块zhuwenjian.cpp

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

# include & ltconio.h & gt

# include & ltstring.h & gt

#包含“创勇. h”

#包含“xuanshi.cpp”

#包含“wenjiancl.cpp”

int main()

{

阴环();

int select = 0;

tel tel[MaxLen];//最多存储200个联系人。

索引lianxren//按声音顺序排序的指针数组

负载(电话& amplianx ren);//从通讯簿文件中读取信息

//循环显示菜单供用户选择。

做{

如果(选择& lt10 || select==20)//主菜单项< 10,或者从子菜单返回20。然后显示主菜单。

select = Menu();

else if(选择& gt20 & amp& amp选择& lt30)//选择子菜单2的项目,继续显示子菜单2。

select = menu 2();

开关(选择)

{

案例1://按字母顺序查看通讯录。

名单(电话,lianx ren);

printf(" \ n \ n \ t按任意键继续...");

getch();//等待用户看清楚屏幕,conio.h

打破;

案例21: //添加联系人。

新(电话& amplianx ren);

打破;

案例22: //编辑联系人

编辑(电话& amplianx ren);

打破;

案例23: //删除联系人

删除(电话& amplianx ren);

打破;

案例20: //返回主菜单

打破;

案例3: //备份通讯录

系统(“cls”);//如果没有子菜单,先清除上一级菜单stdlib.h

保存(电话);//用户可能已经更新了。请先将当前电话号码保存到通讯录文件中。

copy();

打破;

情况0: //退出程序

打破;

}

}而(选择!=0);

保存(电话);//退出系统前,将内存数据存储在通讯录文件中。

返回0;

}

//xuanshi.cpp菜单模块。独立于程序的其他模块。由返回的菜单代码对应于操作。

//欢迎部分

无效阴环()

{

Char A[100]={ "欢迎使用本通讯簿。这个程序是费瑶写的,o(∩_∩)o...!进车!”};

int i,j,k;

for(I = 0;我& lt6;i++)

{

printf(" \ n ");

}

puts(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf(" \ t \ t ");

for(I = 0;一个[我]!='\0';i++)

{

if(I = = 49)printf(" \ n \ n \ t \ t ");

printf("%c ",A[I]);

for(j = 0;j & lt10000;j++)

for(k = 0;k & lt2000;k++)

}

Puts ("\ n \ n \ n \ t \ t 07王,计算机系C班");

puts(" \ n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ a ");

getch();

}

//主菜单,显示一级菜单:查看通讯录(1)、更新通讯录(2)、备份通讯录(3)、退出(0)。

int菜单(无效)

{

int I;

char菜单;

做{

系统(“cls”);//清除屏幕,stdlib.h

for(I = 0;我& lt6;i++)

{

printf(" \ n ");

}

Puts ("\ n * * * * * * *主菜单* * * * * * * * ");

puts(" * * ");

Puts(" * 1。查看通讯簿* ";

Puts(" * 2。更新通讯簿* ";

Puts(" * 3。备份通讯簿* ";

Puts(" * 0。退出程序* ";

puts(" * * ");

puts(" * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf(" \ t请选择:");

menu = getche();

开关(菜单)

{

案例“0”:

puts(" \ n \ n \ t退出程序!");

menu =菜单-' 0 ';

打破;//跳出循环

案例“1”:

案例“3”:

menu =菜单-' 0 ';

打破;

案例“2”:

menu = menu 2();

打破;

默认值:

puts(" \ n \ n \ t错误的选择!");

menu = ' 9

}

} while(menu = = ' 9 ');//返回菜单代码,' 0 ',' 1 ',20,21,22,23和' 3 '都是有效值。

返回菜单;

}

//更新通讯录子菜单,显示:添加联系人(21),编辑联系人(22),删除联系人(23),返回(20)。

int Menu2()

{

char菜单;

int I;

做{

系统(“cls”);//清除屏幕,stdlib.h

for(I = 0;我& lt6;i++)

{

printf(" \ n ");

}

Puts ("\ n * * * * * *更新通讯簿* * * * * * ");

puts(" * * ");

Puts(" * 1。添加联系人* ";

Puts(" * 2。编辑联系人* ";

Puts(" * 3。删除联系人* ";

Puts(" * 0。返回主菜单* ";

puts(" * * ");

puts(" * * * * * * * * * * * * * * * * * * * * * * * \ n ");

printf(" \ t请选择:");

menu = getche();//输入一个没有回音的字符,不需要按回车键,conio.h

开关(菜单)

{

案例“0”:

将(" \ n \ n \返回主菜单!");

打破;//跳出循环

案例“1”:

案例“2”:

案例“3”:

打破;

默认值:

puts(" \ n \ n \ t错误的选择!");

menu = ' 9

}

} while(menu = = ' 9 ');//若要返回菜单代码,“0”、“1”、“2”和“3”是有效值。

返回20+菜单-' 0 ';

}

//浏览部分

Voidlist (tel tel [],index lianxren)//根据lianx ren的排序方式显示所有节点。

{

int I;//i:数组下标

if(Len==0)

{

printf(" \ n \ t无联系人");

返回;

}

大营标投();

for(I = 0;我& ltLenI++) //按字母顺序遍历所有联系人,序号i+1。

PrintOne( *(lianxren.tel[i]),I+1);

dayingbiaowei();

}

Void dayingbiaotou(void) //打印表头

{

printf(" \ n \ n \ t通讯簿*联系人");

printf(" \ n \ t-");

printf(" \ n \ t %-10s %-6s %-10s %-10s "、"姓名"、"组"、"家庭电话"、"手机");

printf(" %-10s %-10s %-10s "、"电子邮件"、"地址"、"备注");

printf(" \ n \ t-");

}

Void dayingbiaowei(void)//打印页脚

{

printf(" \ n \ t-\ n ");

}

Void PrintOne(Tel r,int i) //只打印一个序列号为I的联系人r的信息。

{

如果(我!=0) //联系人前面是序列号。

printf("\n%6d\t%-10s ",I,r . name);

否则//联系人前不添加序列号。

printf("\n\t%-10s ",r . name);

//组:1。老友记2。同事3。家庭4。其他人

开关(右组)

{

案例1:

Printf("%-6s ","朋友");

打破;

案例二:

Printf("%-6s ","同事");

打破;

案例三:

Printf("%-6s ","家族");

打破;

默认值:

Printf("%-6s ","其他");

}

printf(" %-10s %-10s %-10s ",r.home,r.mobile,r . email);

printf("%-10s%-10s ",r.add,r . memo);

}

Void Print(Tel r) //打印表头和联系人信息。

{

大营标投();

PrintOne(r,0);//只打印一个人,不输出序号(第二个参数为0)。

dayingbiaowei();

}

//文件处理模块wenjiancl.cpp

//文件处理部分

Intload (teltel [],index * lianxren)//read。将地址簿文件fName读入内存。分类

{

FILE * fin

int I = 0;

fin=fopen(fName," Rb ");

如果(!鳍)

{

printf(" \ n \ t通讯簿不存在,请先添加联系人!\ n \ n \按任意键继续... ");

getch();

返回0;

}

while(1)

{

弗雷德(& amptel[i],sizeof(Tel),1,fin);

if(feof(fin))

打破;

i++;

}

fclose(fin);

len = I;//更新通讯簿中的总人数

pingypaix(电话,lianx ren);//按声音顺序排序

返回I;

}

Int Save(Tel tel[]) // save。以fName(全局变量)的名称将地址簿保存到磁盘。此时执行物理删除:带有空字符串的联系人表示该联系人已被删除,不会存储在地址簿文件中。

{

FILE * fout

int i,j;//I:tel数组下标,j:通讯录实际人数(不包括TEL中名字为空的元素)。

fout=fopen(fName,“WB”);

如果(!fout)

{

printf(" \ n \ t通讯簿无法正确保存!按任意键继续... ");

getch();

返回0;

}

//i是tel数组的下标,j是实际人数(tel数组中有逻辑删除的联系人,名字为空)。

for(i=0,j = 0;j & ltLen)

{

//找到有效的联系人,驱逐逻辑删除(名称为空字符串)。

while( strcmp(tel[i].名称," " " == 0)

i++;

fwrite(& amp;tel[i],sizeof(Tel),1,fout);

i++;

j++;

}

fclose(fout);

返回j;

}

Int Copy(void) //备份通讯录。复制地址簿文件。

{

FILE *fout,* fin

Tel * p =(Tel *)malloc(sizeof(Tel));//存储从通讯簿中读取的临时数据。

char name[20];

fin=fopen(fName," Rb ");

如果(!鳍)

{

printf(" \ n \ t没有联系!");

返回0;

}

做{

printf(" \ n \ t请输入备份文件名:");

scanf("%s ",名称);

strcat(名称。bak”);

fout=fopen(名字,“WB”);

如果(!fout)

printf(" \ t文件名或路径无效!\ n ");

}while(!fout);

while(1)

{

fread(p,sizeof(Tel),1,fin);

if(feof(fin))

打破;

fwrite(p,sizeof(Tel),1,fout);

}

printf(" \ n \ t备份成功!");

免费(p);

返回1;

}

//基本操作部分

Voidnew (tel tel [],index * lianxren)//添加联系人。添加到数组中的第一个空位置。之后,你需要重新排序

{

int t = 0;//在tel中找到第一个空的位置来存储新输入的联系人。

if(Len & gt;=MaxLen)

{

printf(" \ n \ n \ t通讯簿已满!");

返回;

}

//找到tel中的第一个空位置t。

while( strcmp(tel[t])。名字,“”!=0 )

t++;

输入(& amp电话[t],电话,21);//添加联系人(21),输入联系方式。

len++;//联系人增加了1

pingypaix(电话,lianx ren);//重新排序

}

Voidededit (tel tel [],index * lianx ren)//编辑联系人。需要重新订购

{

int I;

列表(电话,* lianx ren);//按音标排序顺序修改。

if(Len==0)返回;

I = Select();

print(*(lianx ren-& gt;tel[I]));//显示用户选择的联系人I。

输入(lianxren-& gt;电话[i],电话,23);//编辑时输入联系信息(23)

pingypaix(电话,lianx ren);//重新排序

}

Void delete (tel tel [],index * lianx ren)//删除联系人。逻辑删除,只把名字赋给空字符串。删除后需要重新排序。

{

int I;

字符选择;//用户选择:是否继续输入姓名以外的信息。

列表(电话,* lianx ren);//按字母顺序删除

if(Len==0)返回;

I = Select();

print(*(lianx ren-& gt;tel[I]));//显示用户选择的联系人I。

printf(" \ n \ t您确定要删除此人吗?(y/n)");

select = getche();

if(select=='Y' || select=='y ')

{

strcpy(lianx ren-& gt;电话号码[I]-& gt;姓名,“”;//删除联系人信息(逻辑删除):将姓名赋为空字符串,表示没有。

len-;//联系人减1

pingypaix(电话,lianx ren);//重新排序

}

}

Void input (tel * r,tel tel [],int menu)//输入一个联系人的信息,菜单会识别:添加(11)或修改(13)。

{

int select

char name[20],original[20];

If(menu==21)//添加,原本没有名字。

strcpy(original," ");

Else //编辑器,它曾经有个名字

strcpy(original,r-& gt;姓名);

printf(" \ n \ n \ t请输入联系人姓名:");

做{

scanf("%s ",名称);

}while(chongcha(name,tel,orignal));//重复名称检查。修改时,它可以与原始名称相同。

strcpy(r-& gt;姓名、名称);

printf(" \ t是否要继续键入(y/n)?");

select = getche();

if(select=='y' || select=='Y ')

{

//组

Printf("\n\t Group (1。老友记2。同事3。家庭4。其他),请输入序号:“);

scanf("%d ",& amp(r-& gt;群));

while(r->;组& lt1 | | r->;group & gt4)

{

printf(" \ n \ t输入错误!请重新输入组序列号(1。老友记2。同事3。家庭4。其他):)”;

scanf("%d ",& amp(r-& gt;群));

}

printf(" \ t电话:");

scanf("%s ",r-& gt;家);

printf(" \ t手机:");

scanf("%s ",r-& gt;移动);

printf(" \ tEmail:");

scanf("%s ",r-& gt;邮箱);

Printf("\t地址:");

scanf("%s ",r-& gt;添加);

printf(" \ t标记:");

scanf("%s ",r-& gt;备忘录);

}

Else if(menu==21) //添加联系人时(menu=21),用户不输入,设置默认值。

{

r-& gt;组= 4;//默认组:其他

strcpy(r-& gt;家,“”;

strcpy(r-& gt;移动,“”;

strcpy(r-& gt;邮箱,“”;

strcpy(r-& gt;加,“”;

strcpy(r-& gt;备忘录,“”;

}

}

Intchongcha (char * name,tel tel [],char * original)//检查重复。在添加或编辑联系人之前,请检查是否有重复的姓名。

{

int i,j;//i:数组下标j:除名字外的实际人数为空字符串。

int dup = 0;//重名标志:1重名,0不重名。

if(strcmp(name,original)!=0)//name不是原来的名字。

for(i=0,j = 0;j & ltLen)//遍历所有联系人

{

//找到有效的联系人,驱逐逻辑删除(名称为空字符串)。

while( strcmp(tel[i].名称," " " == 0)

i++;

If (strcmp (name,tel [I].name) = = 0)//name不是原姓名,但在通讯录中是重名。

{

dup = 1;

printf(" \ n \ t name!请重新输入:“);

打破;

}

i++;

j++;

}

返回dup

}

Int Select() //选择联系人序列号以避免出错。

{

int I = 0;

int c;//c:scanf()输入的返回值。如果输入成功,返回1;否则,返回0。

printf(" \ n \ t请按序列号选择联系人:");

c=scanf("%d ",& ampI);

while(我& lt1 | | I & gt;Len)

{

printf(" \ n \ t输入错误!请按序列号选择一个联系人:");

if(c = = 0)fflush(stdin);//输入失败,清空与输入流stdin,stdio.h相关的输入缓冲区内容

c=scanf("%d ",& ampI);

}

返回I-1;

}

//排序部分

Void pingy paix (tel tel [],index * lianx ren)//按声音顺序排序。

{

int i,j;//i:数组下标j:除名字外的实际人数为空字符串。

if( Len==0)

返回;

//初始化排序指针数组

lianx ren-& gt;len = 0;

for(i=0,j = 0;j & ltLen)

{

//找到有效的联系人,驱逐逻辑删除(名称为空字符串)。

while( strcmp(tel[i].名称," " " == 0)

i++;

lianx ren-& gt;电话[j]= & amp;电话[I];

j++;

i++;

lianx ren-& gt;len++;

}

//选择排序

玄派西(lianx ren);

}

void Xuan paixi(Index * p)//选择并排序指针数组。

{

int i,j,n = p-& gt;len

int min

电话*温度;

if( n==0)返回;//没有联系人,所以不需要排序。

//选择排序

for(I = 0;我& ltn-1;i++)

{

//找到最小的元素

min = I;

for(j = I+1;j & ltn;j++)

{

if(strcmp(p-& gt;电话号码[j]-& gt;姓名,p-& gt;电话[分钟]-& gt;姓名)& lt0)

min = j;

}

//交换最小元素min,当前无序序列的第一个元素I。

如果(min!=i)

{

temp = p-& gt;电话[I];

p->;tel[I]= p-& gt;电话[分钟];

p->;tel[min]= temp;

}

}//I的结尾

}