|
1楼 #include "header.h" const char PWD[]="1"; int password() { char c; char s[sizeof(PWD)]; int k,count=0; printf("\n\n\t\t\t请输入管理员密码:"); scanf("%s",s); if( strcmp( s, PWD ) == 0 ) return k=1; //密码正确 else {printf("\n\n\t\t\t密码错误.你无权访问此程序!\n\n\n");++count;} return k=0; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //main函数部分 void main() { int password(); if(password() ==0) /* 检查密码 */ exit(0); system("cls"); printf("All Rights reserved. Aeolus Studio INC\nV1.02\n\n"); DisplayMainMenu(); } ///////////////////////////////////////////////////////////////////////////////////////////////////////////// //笔记内容写入操作 void write() { int i,n,j,sel='Y'; n=fileopenR(); printf("写入中……\n\n"); printf("你已经存有%d条记录",n); while(sel=='Y'¦¦sel=='y'){ printf("共有以下类别以供参考:\n"); for(j=0;j<6;j++) printf("\t%s\n",type[j]); //显示分类目录 printf("你想把笔记归入哪个类别:"); //开始输入笔记信息 scanf("%s",&NoteData[n].type); printf("此条记录序号为:%d\n ",n+1); NoteData[n].number=(n+1); printf("请输入标题:"); scanf("%s",&NoteData[n].name); printf("日期(以\"年.月.日\"方式输入):"); scanf("%d.%d.%d",&NoteData[n].date.year,&NoteData[n].date.month,&NoteData[n].date.day); printf("请输入内容:"); scanf("%s",&NoteData[n].content); printf("输入完毕,是否继续?\n"); scanf("%s",&sel); if(sel=='n'¦¦sel=='N'){ printf("你已经存储了%d条记录。\n",n+1); break ;} else if (sel=='Y'¦¦sel=='y'){ system("cls"); printf("\n********************************************************************************"); printf("\t\t\t\t你选择继续添加记录\n\n"); n+=1;} } if( (fp=fopen("NoteData.txt","w+"))==NULL) {printf("无法打开文件NoteData.txt\n");return;} for(i=0;i<=n;i++) fwrite(&NoteData[i],sizeof(struct data),1,fp); fclose(fp); printf("\n笔记录入完成。"); quit(); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////// //笔记读取操作 void load() { int i,n=-1; if((fp=fopen("NoteData.txt","r+"))==NULL) {printf("无法打开文件NoteData.txt\n");return;} for(i=0;fread(&NoteData[i],sizeof(struct data),1,fp)!=0;i++){ printf("*******************************************************************************\n\n"); printf("分类名称:%s\n序号:%d\t\t标题:%s\n",NoteData[i].type,NoteData[i].number,NoteData[i].name); printf("日期:%d.%d.%d \n",NoteData[i].date.year,NoteData[i].date.month,NoteData[i].date.day); printf("\n内容:%s\n\n\n\n",NoteData[i].content); } fclose(fp); n=i; printf("\n\n\n读取完毕,共有%d条记录\n",i); if(n<0) printf("文件为空,请重试。\n"); quit(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////// //笔记删除操作 void del() { int i,j,flag=0,n,x; int num; n=fileopenR(); |
|
|
|
- 共有9篇贴子
|
2楼 if(n==0) {printf("\n笔记为空为空。\n\n");quit();} printf("\n\n以下是待删除记录的简明信息:\n============================================\n"); for(x=0;x<n;x++){ printf("类别:%s\n\n序号:%d\t名称:%s\n\n",NoteData[x].type,NoteData[x].number,NoteData[x].name); printf("============================================\n");} printf("\n准备删除...\n共有%d条记录\n",n); while(num!=0){ printf("\n请输入序号:(退出操作请按0) "); scanf("%d",&num); if (num==0) quit(); for(flag=1,i=0;flag&&i<n;i++){ if(num==(NoteData[i].number)){ for(j=i;j<n;j++){ strcpy(NoteData[j].type, NoteData[j+1].type); NoteData[j].number = (NoteData[j+1].number-1); //对记录序号重新排序 strcpy(NoteData[j].name, NoteData[j+1].name); NoteData[j].date.year = NoteData[j+1].date.year; NoteData[j].date.month = NoteData[j+1].date.month ; NoteData[j].date.day = NoteData[j+1].date.day; strcpy(NoteData[j].content , NoteData[j+1].content); } flag=0; if((fp=fopen("NoteData.txt","w+"))==NULL) {printf("无法打开文件NoteData.txt\n");quit();} for(i=0;i<n-1;i++) fwrite(&NoteData[i],sizeof(struct data),1,fp); fclose(fp); printf("\n文件已经删除完毕,希望你不会后悔!"); } } if(!flag){ n-=1; if(n==0) {printf("现在文件为空内容,退出该操作。!\n");return;} } else printf("没有发现相应笔记,请重新输入笔记序号。\n"); }quit(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////// //笔记编辑操作 void edit() { int i,j,n=-1,sel,x; char na[40]; struct data temp; j=fileopenR(); printf("共含 %d条记录。",j); printf("\n\n以下是待删除记录的简明信息:\n============================================\n"); for(x=0;x<j;x++){ printf("类别:%s\n\n序号:%d\t名称:%s\n\n",NoteData[x].type,NoteData[x].number,NoteData[x].name); printf("============================================\n");} printf("\n请输入要修改信息的标题(输入0退出): "); scanf("%s",na); for(i=0;i<j;i++) if(strcmp(na,NoteData[i].name)==0) n=i; else quit(); printf("\n请问你要...\n"); printf("\n\t\t\t<1>.修改分类名称.\n\t\t\t<2>.修改标题.\n\t\t\t<3>.修改日期.\n\t\t\t<4>.修改内容\n"); printf("\t\t\t<5>.退出。\n");printf("\t\t请选择:"); scanf("%d",&sel); switch(sel){ case 1: printf("\n请输入新分类名称:"); scanf("%s",temp.type); strcpy(NoteData[n].type,temp.type); printf("\n修改成功。"); break; case 2: printf("\n请输入新标题: "); scanf("%s",temp.name); strcpy(NoteData[n].name,temp.name); printf("\n修改成功。"); break; case 3: printf("\n请输入新日期(以\"年.月.日\"方式输入):"); scanf("%d.%d.%d",&temp.date.year,&temp.date.month,&temp.date.day); NoteData[n].date.year=temp.date.year; NoteData[n].date.month=temp.date.month; NoteData[n].date.day=temp.date.day; printf("\n修改成功。"); break; case 4: printf("\n请输入新内容:"); scanf("%s",temp.content); strcpy(NoteData[n].content,temp.content); printf("\n修改成功。"); break; case 5: quit(); } if((fp=fopen("NoteData.txt","w+"))==NULL) {printf("无法打开文件NoteData.txt.\n");return;} for(j=0;j<i;j++) fwrite(&NoteData[j],sizeof(struct data),1,fp); |
|
|
|
|
3楼 printf("\n\n\n编辑完毕。\n"); quit(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////// //对笔记记录各类别条数进行统计,并按降序输出 void sort() { int i,n,x; int a; for(a=0;a<6;a++) NoteSort[a].number=0; n=fileopenR(); printf("\n我的笔记本共含有%d条记录。各详细类别中条目如下:",n); for(i=0;i<n;i++){ for(x=0;x<6;x++) if(strcmp(NoteData[i].type,NoteSort[x].type)==0) ++NoteSort[x].number; } for(;n>=0;n--){ for(x=0;x<6;x++) if((n==(NoteSort[x].number))){ //将各分类笔记数目同总笔记数目比较,符合则显示,不符则将总数目减一后比较 printf("\n============================================\n"); printf("\n\t %s %d条记录\n",NoteSort[x].type,NoteSort[x].number);} } quit(); } //////////////////////////////////////////////////////////////////////////////////////////////////////////// //查找笔记内容 void search() { int i,n; int m=-1,find=0; char na[40]; n=fileopenR(); printf("\n\n开始查询,请输入检索字:"); printf("\n============================================\n"); scanf("%s",na); int x; for(i=0;i<n;i++){ x=findmatch(NoteData[i].name,na); if(x>=0){ printf("\n分类名称: %s\t\t 序号:%d\n",NoteData[i].type,NoteData[i].number); printf("日期:%d.%d.%d\n",NoteData[i].date.year,NoteData[i].date.month,NoteData[i].date.day); printf("标题: %s\n\n",NoteData[i].name); printf("内容:%s\n\n\n",NoteData[i].content); printf("\n"); m=x; ++find; printf("============================================\n"); } } if(m>=0) printf("\n\t待找信息已列出!\t\t"); printf("\t共计%d条记录\n",find); if(m<0) printf("\t没有搜到与该字相关的记录!\n\n"); if(strcmp(na,"0")==0) quit(); quit(); } ////////////////////////////////////////////////////////////// 这里是头文件 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <string.h> #define MAX 100 void load(); void write(); void del(); void edit(); void sort(); void search(); char type[6][9]={"课堂笔记","问题记录","我的日记","会议记录","实用技巧","网页收藏"}; FILE *fp; ////////////////////////////////////各项记录数据结构体/////////////////////////////////////////////////////////// struct data{ char type[20]; int number; char name[40]; struct { int year; int month; int day; }date; char content[200]; }NoteData[MAX]; ///////////////////////////////////笔记记录统计结构体///////////////////////////////////////////////////////////// struct datasort{ char type[20]; int number; }NoteSort[6]={{"课堂笔记"}, {"问题记录"}, {"我的日记"},{"会议记录"}, {"实用技巧"},{"网页收藏"}} ; ////////////////////////////////////////////////////显示主菜单程序//////////////////////////////////////////////// void DisplayMainMenu() { int selete; printf("\n"); printf("\t\t==========================================\n"); printf("\t\t\t ——分类记事本 ——\n"); printf("\t\t==========================================\n"); printf("\t\t学号:20041120347 姓名:温晓林 班级:二班\n\n"); printf("\t\t\t1.分类记事本记录读取\n"); printf("\t\t\t2.分类记事本记录增加\n"); printf("\t\t\t3.分类记事本记录删除\n"); printf("\t\t\t4.分类记事本记录编辑\n"); printf("\t\t\t5.分类记事本记录统计\n"); printf("\t\t\t6.分类记事本记录查询\n"); printf("\t\t\t7.退出\n\n"); printf("\t\t\t请选择(1-7):"); scanf("%d",&selete); switch(selete){ case 1: load(); break; case 2: write();break; case 3: del(); break; case 4: edit(); break; case 5: sort(); break; case 6: search();break; case 7: exit(0);break; } } ////////////////////////////////////退出程序//////////////////////////////////////////////////////////////////////// void quit() { system("pause");system("cls");DisplayMainMenu(); } ///////////////////////////////////////文件读取式打开函数/////////////////////////////////////////////////////////// int fileopenR() { int i; if((fp=fopen("NoteData.txt","r"))==NULL) {printf("无法打开文件NoteData.txt.\n");return -1;} for(i=0;fread(&NoteData[i],sizeof(struct data),1,fp)!=0;i++); fclose(fp); return i; } /////////////////////////////////////////查找函数//////////////////////////////////////////////// int findmatch(char s[],char t[]) { int i,j,k; for(i=0;s[i]!='\0';i++){ for(j=i,k=0;t[k]!='\0' && s[j]==t[k];j++,k++); if(k>0 && t[k]=='\0') return i; } return -1; } ////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
|
5楼 { char c; char s[sizeof(PWD)]; /* don't allocate array like that, PWD is a pointer to char array, which in most of the mainstream OS(such as M$ Window$ 95/NT/98/Me/2000/XP 32-bit Version, Linux, FreeBSD, etc.) is 4 bytes in size. 2 bytes in good-old ms-dos. This will not be what you've expected.*/ /* If you are using a 32-bit compiler, what is really happening in your case is you allocated a char array with 4 bytes in size. Fortunately, your preset password is only 2 bytes (1 for '1', the other being a null '\0'), as long as you type in the correct password (or something shorter than 3 bytes, you're okay. */ /* Anyway, this proper way to do this should be const int MAX_BUF = 41; char * buf[MAX_BUF]; ... scanf("%40s", buf); if (strncmp(buf, PWD, MAX_BUF == 0) ... */ /* by the way, it seems you don't need the variable k, don't you? */ /* I am using a friend's computer with no chinese input, thus, i have to type in English. SORRY for any inconvinience. I will tell you more when i get home, in chinese, of course. */ |
|
|
|
|
6楼 SHOULD BE /* Anyway, the proper way to do this should be const int MAX_BUF = 41; char buf[MAX_BUF]; ... scanf("%40s", buf); if (strncmp(buf, PWD, MAX_BUF == 0) ... */ ... Ha Ha, Coz' I was in hurry, I have to go now... |
|
|
|
| 202.196.16.* |
7楼 你可以完成吗 |
|
|
| 221.233.86.* |
8楼 |
|
|
| 124.165.114.* |
9楼 |
|
|
