分类记事本--Aeolus_WinD3贴

到百度贴吧首页
新闻   网页   贴吧   知道   MP3   图片   视频   百科
    吧内搜索 | 帮助
  • 共有9篇贴子

分类记事本--Aeolus_WinD3贴

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();

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楼

 fclose(fp);
 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;
}
////////////////////////////////////////////////////////////////////////////////////////////////// 

4楼

不知道他为什么喜欢把帖放到置顶.哎......

5楼

int password()
{
 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楼

sorry, i type something wrong

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楼

这些东西真是自己写的吗?要是那样的话.我想我算是遇上高手了.你们帮帮助我吗我的QQ18634860
124.165.114.*

9楼

吗呀,,我看的眼都昏了

发表回复

内 容:
用户名:
  
©2010 Baidu 贴吧协议  意见反馈