求大神用c语言改一下这个日程管理系统的代码谢谢了

sinat_35111235 2016-06-26 05:44:43
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
#include <time.h>

typedef struct User
{
char Name[20];
char Pass[7];
}User;

typedef struct Date
{
int Year;
int Month;
int Day;
}Date;

typedef struct Data
{
int No;
int Count;
char Name[20];
Date Time;
char Info[401];
struct Data *Next;
}Data;


int Enroll();
Data *Creat();
void Clock();
int See();
int Add();
void Browse(Data *Head, int count);
int Delete();
void Menu();
int Login();
int Mode(int slec, char Name[]);

int main()
{
FILE *fp;
int slec;
int Run=1;

char New[20]="Admin",Key[20]="admin";

if (fopen("Users.list","rb") == NULL)
{
printf("初始化...");
fp=fopen("Users.list","wb");

printf("内置账户:%s,长度:%d",New,strlen(New));
fwrite(New,20,1,fp);
printf("初始密码:%s,长度:%d",Key,strlen(Key));
fwrite(Key,20,1,fp);

fclose(fp);
printf("完成!\n");
}

while (Run)
{
printf("====================欢迎使用日程管理系统!======================\n");
printf(" 请选择 1.注册 2.登录 ");
scanf("%d",&slec);

if (slec==1) Run=Enroll();
else if (slec==2) Run=Login();
else printf("该功能尚未开发。\n");
}
return 0;
}

int Enroll()
{
FILE *fp;
char Name[20],New[20],Key[20];

getchar();
fp=fopen("Users.list","rb+");
if (fp == NULL) {printf("文件打开失败!\n"); return 1;}

printf("请输入要新建的用户名(至多19个字符):");
fgets(New,20,stdin);
New[strlen(New)-1]='\0';

while(1)
{
if(fread(Name,20,1,fp) != 1) break;
if (strcmp(New, Name) == 0)
{
printf("用户名已存在!请重新创建...\n" );
fclose(fp);
return 1;
}
fread(Key,7,1,fp);
}
printf("请输入密码:(至多19个字符)");
fgets(Key,20,stdin);
Key[strlen(Key)-1]='\0';

fwrite(New,20,1,fp);
fwrite(Key,20,1,fp);
printf("创建完成,请重新登录!\n");
fclose(fp);

return 1;
}

void Clock()
{
time_t t;
struct tm *tp;

t=time(NULL);
tp=localtime(&t);
printf("当前本机时间为 ");
printf("%d:%d:%d\n ",tp->tm_hour,tp->tm_min,tp->tm_sec);
printf("%d年%d月%d日 ",tp->tm_year+1900,tp->tm_mon+1,tp->tm_mday);
printf("今天是本周第%d天,今年的第%d天\n ",tp->tm_wday,tp->tm_yday);
}

Data *Creat(Data *Last)
{
Data *New=NULL;

New=(Data*)malloc(sizeof(Data));
if (New == NULL)
{
printf("内存分配失败!\n");
return NULL;
}
Last=New;

Clock();

printf("请输入日程时间(格式:年.月.日)");
scanf("%d.%d.%d",&New->Time.Year,&New->Time.Month,&New->Time.Day);
getchar();

printf("请输入日程内容:(至多400字符)\n ");
fgets(New->Info,400,stdin);
New->Info[400]='\0';

New->Next=NULL;

return New;
}

int Add(char Name[20])
{
FILE *fp;
Data New;

fp=fopen("Users.list","rb+");
if (fp == NULL) {printf("文件打开失败!\n"); return 1;}

Clock();
printf("请输入日程时间(格式:年.月.日)");
scanf("%d.%d.%d",&New.Time.Year,&New.Time.Month,&New.Time.Day);
getchar();

printf("请输入日程内容:(至多400字符)\n ");
fgets(New.Info,400,stdin);
New.Info[400]='\0';

fwrite(&New.Time.Year,sizeof(int),1,fp);
fwrite(&New.Time.Month,sizeof(int),1,fp);
fwrite(&New.Time.Day,sizeof(int),1,fp);
fwrite(New.Info,401,1,fp);

return 1;
}

int Mode(int slec, char Name[20])
{
FILE *fp;
Data *New=NULL,*Temp=NULL,*Head=NULL;
int count=0;

fp=fopen(Name,"rb+");
if (fp == NULL) {printf("文件打开失败!\n"); return 1;}

while(1)
{

New=(Data*)malloc(sizeof(Data));
if (New == NULL)
{
printf("内存分配失败!\n");
return 1;
}
if (Head == NULL) {Head=New;Temp=New;} printf("ready!\n");

if(fread(&New->Time.Year,sizeof(int),1,fp) != 1) break; printf("start!\n");
fread(&New->Time.Month,sizeof(int),1,fp);
fread(&New->Time.Day,sizeof(int),1,fp);
fread(New->Info,401,1,fp); New->Next=NULL;
New->Count=(++count); printf("over!\n");

printf("序号%d 日期%d.%d.%d",&Head->Count,
&New->Time.Year,&New->Time.Month,&New->Time.Day);
puts(New->Info);


Temp=New;
}

if (slec==3) Browse(Head,count);
fclose(fp);
return 1;
}

void Menu(char Name[20])
{
int Run=1;
char slec;
FILE *fp;

printf("===========================登录成功=============================\n");
if (fopen(Name,"rb") == NULL)
{
printf("您是新用户,来创建您的第一个日程!\n");
fp=fopen(Name,"wb");
fclose(fp);
Run=Add(Name);
}

while (Run)
{
printf("================================================================\n",Name);
printf("已登录为%s\n",Name);
printf("================================================================\n",Name);
printf(" 1.新建日程\n");
printf(" 2.查看当前日程\n");
printf(" 3.浏览所有日程\n");
printf(" 4.删除日程\n");
printf(" 5.退出登录\n");
printf(" 请选择相应序号: ");

scanf("%d",&slec);

if (slec==1) Add(Name);
else if (slec>=2 && slec<=4) Run=Mode(slec,Name);
else if (slec==5) break;
else printf("该功能尚未开发。\n");
}
}

int Login()
{
FILE *fp;
int Run=0;
char Name[20],Pass[20],New[20],Key[20];

getchar();
fp=fopen("Users.list","rb+");
if (fp == NULL) {printf("文件打开失败!\n"); return 1;}

printf("请输入用户名:");
gets(New);

while(1)
{
if(fread(Name,20,1,fp) != 1) break;
fread(Pass,20,1,fp);
if (strcmp(New, Name) == 0) {Run=1;break;}
}
fclose(fp);

if (Run == 1)
{
printf("请输入密码:");
gets(Key);
if (strcmp(Key,Pass) != 0)
printf("密码错误!\n");
else
{
Menu(Name);
printf("已退出登录!three\n");
}
}
else
printf("用户不存在!\n");

return 1;
}

void Browse(Data *Head, int count)
{
printf("以下为您的所有日程,共%d条:\n",&count);
while(count--)
{
printf("序号%d 日期%d.%d.%d",&Head->Count,
&Head->Time.Year,&Head->Time.Month,&Head->Time.Day);
puts(Head->Info);
Head=Head->Next;
}
}
...全文
686 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_37836059 2017-06-24
  • 打赏
  • 举报
回复
呃。。。。。突然感觉怪怪的,我快写完了的,跟你这个很不一样,你别担心。。。。。。
weixin_37836059 2017-06-24
  • 打赏
  • 举报
回复
哈哈哈哈,我挑的题目也是这个,莫不是校友来着
yi19861209 2017-06-22
  • 打赏
  • 举报
回复
yi19861209 2017-06-22
  • 打赏
  • 举报
回复
赵4老师 2017-06-22
  • 打赏
  • 举报
回复
治大国如烹小鲜; 调程序似雕玉器。
建筑师 2017-06-22
  • 打赏
  • 举报
回复
调试的过程跟破案差不多, 其实也很有乐趣
自信男孩 2017-06-22
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//#include <conio.h>
#include <time.h>

typedef struct User
{
    char Name[20];
    char Pass[7];
}User;

typedef struct Date
{
    int Year;
    int Month;
    int Day;
}Date;

typedef struct Data
{
    int No;
    int Count;
    char Name[20];
    Date Time;
    char Info[401];
    struct Data *Next;
}Data;


int Enroll();
Data *Creat();
void Clock();
int See();
int Add();
void Browse(Data *Head, int count);
int Delete();
void Menu();
int Login();
int Mode(int slec, char Name[]);

int main()
{
    FILE *fp;
    int slec;
    int Run=1;

    char New[20]="Admin",Key[20]="admin";

    if (fopen("Users.list","rb") == NULL)
    {
        printf("初始化...");
        fp = fopen("Users.list","wb");

        printf("内置账户:%s,长度:%u\n", New, strlen(New));
        fwrite(New, 20, 1, fp);
        printf("初始密码:%s,长度:%u\n", Key, strlen(Key));
        fwrite(Key, 20, 1, fp);

        fclose(fp);
        printf("完成!\n");
    }

    while (Run)
    {
        printf("====================欢迎使用日程管理系统!======================\n");
        printf("                    请选择 1.注册 2.登录   ");
        scanf("%d",&slec);

        if (slec==1)
            Run = Enroll();
        else if (slec==2)
            Run = Login();
        else printf("该功能尚未开发。\n");
    }
    return 0;
}

int Enroll()
{
    FILE *fp;
    char Name[20],New[20],Key[20];

    getchar();
    fp=fopen("Users.list","rb+");
    if (fp == NULL) {
        printf("文件打开失败!\n");
        return 1;
    }

    printf("请输入要新建的用户名(至多19个字符):");
    fgets(New, 20, stdin);
    New[strlen(New)-1]='\0';

    while(1)
    {
        if(fread(Name,20,1,fp) != 1)
            break;
        if (strcmp(New, Name) == 0)
        {
            printf("用户名已存在!请重新创建...\n" );
            fclose(fp);
            return 1;
        }
        fread(Key,20,1,fp);
    }
    printf("请输入密码:(至多19个字符)");
    fgets(Key,20,stdin);
    Key[strlen(Key)-1]='\0';

    fwrite(New,20,1,fp);
    fwrite(Key,20,1,fp);
    printf("创建完成,请重新登录!\n");
    fclose(fp);

    return 1;
}

void Clock()
{
    time_t t;
    struct tm *tp;

    t=time(NULL);
    tp=localtime(&t);
    printf("当前本机时间为     ");
    printf("%d:%d:%d\n ",tp->tm_hour,tp->tm_min,tp->tm_sec);
    printf("%d年%d月%d日 ",tp->tm_year+1900,tp->tm_mon+1,tp->tm_mday);
    printf("今天是本周第%d天,今年的第%d天\n ",tp->tm_wday,tp->tm_yday);
}

Data *Creat(Data *Last, Data node)
{
    Data *New=NULL;

    New=(Data*)malloc(sizeof(Data));
    if (New == NULL)
    {
        printf("内存分配失败!\n");
        return NULL;
    }
    Last = New;

    Clock();

    printf("请输入日程时间(格式:年.月.日)");
    scanf("%d.%d.%d",&New->Time.Year,&New->Time.Month,&New->Time.Day);
    getchar();

    printf("请输入日程内容:(至多400字符)\n");
    fgets(New->Info, 400, stdin);
    //New->Info[400]='\0'; //not need
    New->Next=NULL;

    return Last;
}

int Add(char Name[20])
{
    FILE *fp;
    Data New;

    fp=fopen("Users.list","rb+");
    if (fp == NULL)    {printf("文件打开失败!\n");    return 1;}

    Clock();
    printf("请输入日程时间(格式:年.月.日)");
    scanf("%d.%d.%d",&New.Time.Year,&New.Time.Month,&New.Time.Day);
    getchar();

    printf("请输入日程内容:(至多400字符)\n  ");
    fgets(New.Info,400,stdin);
    //New.Info[400]='\0'; /* not need */

    fwrite(&New.Time.Year,sizeof(int),1,fp);
    fwrite(&New.Time.Month,sizeof(int),1,fp);
    fwrite(&New.Time.Day,sizeof(int),1,fp);
    fwrite(New.Info,401,1,fp);

    return 1;
}

int Mode(int slec, char Name[20])
{
    FILE *fp;
    Data *New=NULL,*Temp=NULL,*Head=NULL;
    int count=0;

    fp=fopen(Name,"rb+");
    if (fp == NULL)    {printf("文件打开失败!\n");    return 1;}

    while(1)
    {

        New=(Data*)malloc(sizeof(Data));
        if (New == NULL)
        {
            printf("内存分配失败!\n");
            return 1;
        }
        if (Head == NULL)    {Head=New;Temp=New;}                       printf("ready!\n");

        if(fread(&New->Time.Year,sizeof(int),1,fp) != 1)    break;       printf("start!\n");
        fread(&New->Time.Month,sizeof(int),1,fp);
        fread(&New->Time.Day,sizeof(int),1,fp);
        fread(New->Info,401,1,fp);    New->Next=NULL;
        New->Count=(++count);                                             printf("over!\n");

        printf("序号%d 日期%d.%d.%d", Head->Count,
                New->Time.Year, New->Time.Month, New->Time.Day);
        puts(New->Info);


        Temp=New;
    }

    if (slec==3)    Browse(Head,count);
    fclose(fp);
    return 1;
}

void Menu(char Name[20])
{
    int Run=1;
    int slec;
    FILE *fp;

    printf("===========================登录成功=============================\n");
    if (fopen(Name,"rb") == NULL)
    {
        printf("您是新用户,来创建您的第一个日程!\n");
        fp = fopen(Name, "wb");
        fclose(fp);
        Run = Add(Name);
    }

    while (Run)
    {
        printf("================================================================\n");
        printf("已登录为%s\n",Name);
        printf("================================================================\n");
        printf("                         1.新建日程\n");
        printf("                         2.查看当前日程\n");
        printf("                         3.浏览所有日程\n");
        printf("                         4.删除日程\n");
        printf("                         5.退出登录\n");
        printf("                         请选择相应序号: ");

        scanf("%d", &slec);

        if  (slec == 1)
            Add(Name);
        else if (slec>=2 && slec<=4)    Run=Mode(slec,Name);
        else if (slec==5)    break;
        else printf("该功能尚未开发。\n");
    }
}

int Login()
{
    FILE *fp;
    int Run=0;
    char Name[20],Pass[20],New[20],Key[20];

    getchar();
    fp=fopen("Users.list","rb+");
    if (fp == NULL)    {printf("文件打开失败!\n");    return 1;}

    printf("请输入用户名:");
    gets(New);

    printf("Input name: %s\n", New);
    while(1)
    {
        if(fread(Name,20,1,fp) != 1)
            break;
        puts(Name);
        fread(Pass,20,1,fp);
        if (strcmp(New, Name) == 0) {
            Run = 1;
            break;
        }
    }
    fclose(fp);

    if (Run == 1)
    {
        printf("请输入密码:");
        gets(Key);
        if (strcmp(Key,Pass) != 0)
            printf("密码错误!\n");
        else
        {
            Menu(Name);
            printf("已退出登录!three\n");
        }
    }
    else
        printf("用户不存在!\n");

    return 1;
}

void Browse(Data *Head, int count)
{
    printf("以下为您的所有日程,共%d条:\n", count);
    while(count--)
    {
        printf("序号%d 日期%d.%d.%d", Head->Count,
                Head->Time.Year, Head->Time.Month, Head->Time.Day);
        puts(Head->Info);
        Head = Head->Next;
    }
}
改了一部分你的程序,目前登录和注册没问题了。 日程管理部分,逻辑本身有问题,不好改。日程链表没有调用,自然也无法查询和删除日志节点。建议将创建日程链表和保存文件分开,先创建好日程链表,然后单独一个功能(在menu菜单里加一项保存文件)用于保存文件。
clague 2017-06-21
  • 打赏
  • 举报
回复
建议一个用户一个用户文件,先得到目录下文件名,在判断输入用户名与文件名是否重复 system("dir /b >>direct.txt"); 再用fgets逐行读取direct.txt。
赵4老师 2017-06-21
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
qq_39256987 2017-06-21
  • 打赏
  • 举报
回复
楼主解决了吗?
sinat_35111235 2016-06-26
  • 打赏
  • 举报
回复

这是要求


现在的问题是 大体成功了但是 建立的日程之后 运行时出了问题
并且注册的时候 不能判断用户名重复

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧