本次用纯C语言设计一个机器人管理系统

可以实现的功能如下:

① 插入一个事件安排,包括事件的时期、具体时间(时分秒)、事件内容 (用一个结构体实现)
② 对所有的事件进行一个按时间的先后排序
③ 删除一个事件,按照时间或者事件内容删除(两种删除都要实现)
④ 查找具体事件具体要被完成的事件
⑤ 修改一个事件的具体时间
⑥ 到点提醒,到确切的时间点后,提醒张三该去做那件事情(获取系统当前时间即可)

涉及到的知识点:

① 链表的各种操作
② 结构体
③ 排序
④ 线程

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define CONTENT_LENGTH 100typedef struct event{int year;int month;int day;int hour;int minute;int second;char content[CONTENT_LENGTH];struct event *next;
}Event;//初始化链表
Event* init(){Event *eHead = (Event*)malloc(sizeof(Event));eHead->next=NULL;if(eHead!=NULL){return eHead;}else{printf("空间分配失败!");exit(1);}
}//打印事件具体时间
void printInfo(Event *Ev){printf("日期: %04d/%02d/%02d 时间: %02d:%02d:%02d 事件:%s\n",Ev->year,Ev->month,Ev->day,Ev->hour,Ev->minute,Ev->second,Ev->content);
}//输入新的事件 总是从尾端插入
Event* insert(Event *eHead){for(;eHead->next!=NULL;eHead=eHead->next);Event *test=(Event*)malloc(sizeof(Event));test->next=NULL;printf("请输入日期:yyyy/mm/dd(例如:2018/01/09)\n");scanf("%d %*c %d %*c %d",&test->year,&test->month,&test->day);printf("请输入具体时间:hh:MM:ss(例如:23:01:00)\n");scanf("%d %*c %d %*c %d",&test->hour,&test->minute,&test->second);fflush(stdin);printf("请输入事件内容(最长为50个字符):\n");gets(test->content);printf("事件已成功保存!\n");eHead->next=test;
}//比较两事件的时间先后
int compare(Event *a,Event *b){//将Int格式化为str,直接比较字符串的大小char str_a[100]={0};sprintf(str_a,"%d04%02d%02d%02d%02d%02d",a->year,a->month,a->day,a->hour,a->minute,a->second);char str_b[100]={0};sprintf(str_b,"%d04%02d%02d%02d%02d%02d",b->year,b->month,b->day,b->hour,b->minute,b->second);int n=strcmp(str_a,str_b);if(n>0){return 1;}else{return 0;}
}//排序
Event* sort(Event *L){Event *p, *q, *next;int temp;for( p = L->next; p->next != NULL; p = p->next )    /*每次循环都找出一个最小值,将最小值交换到第一位,然后将指针向后移动一位*/{next = p;for( q = p->next; q; q = q->next )    /*由前向后遍历,找出最小的节点*/{if( compare(next,q)==1 )next = q;}if( next != p ){temp = p->year;p->year = next->year;next->year = temp;temp = p->month;p->month = next->month;next->month = temp;temp = p->day;p->day = next->day;next->day = temp;temp = p->hour;p->hour = next->hour;next->hour = temp;temp = p->minute;p->minute = next->minute;next->minute = temp;temp = p->second;p->second = next->second;next->second = temp;char tem[CONTENT_LENGTH];memcpy(tem,p->content,100);memcpy(p->content,next->content,100);memcpy(next->content,tem,100);}}printf("排序成功!\n");return L;
}// 通过具体日期查找事件
void findByDate(Event *head){int year;int month;int day;int hour;int minute;int second;printf("请输入日期:yyyy/mm/dd(例如:2018/01/09)\n");scanf("%d %*c %d %*c %d",&year,&month,&day);printf("请输入具体时间:hh:MM:ss(例如:23:01:00)\n");scanf("%d %*c %d %*c %d",&hour,&minute,&second);printf("查找中...");for(head=head->next;head!=NULL;head=head->next){if(head->day==day && head->hour==hour && head->minute==minute && head->month==month && head->second==second && head->year==year){printf("已找到:\n");printInfo(head);break;}}if(head==NULL){printf("未找到该事件\n");}
}//通过事件内容查找事件
void findByEventContent(Event *head){char temp[CONTENT_LENGTH];printf("请输入您要查找事件内容:\n");gets(temp);printf("查找中...");for(head=head->next;head!=NULL;head=head->next){if(strcmp(temp,head->content)==0){printf("已找到:\n");printInfo(head);break;}}if(head==NULL){printf("未找到该事件\n");}
}//通过日期删除事件
void deleteByDate(Event *head){Event *before,*cur;int year;int month;int day;int hour;int minute;int second;printf("请输入日期:yyyy/mm/dd(例如:2018/01/09)\n");scanf("%d %*c %d %*c %d",&year,&month,&day);printf("请输入具体时间:hh:MM:ss(例如:23:01:00)\n");scanf("%d %*c %d %*c %d",&hour,&minute,&second);for(before=head,cur=head->next;cur!=NULL;cur=cur->next,before=before->next){if(cur->day==day && cur->hour==hour && cur->minute==minute && cur->month==month && cur->second==second && cur->year==year){before->next=cur->next;printf("删除成功\n");break;}}if(cur==NULL){printf("未找到该事件\n");}}//通过事件内容删除事件
void deleteByContent(Event *head){Event *before,*cur;char temp[CONTENT_LENGTH];printf("请输入事件内容:\n");gets(temp);for(before=head,cur=head->next;cur!=NULL;before=before->next,cur=cur->next){if(strcmp(temp,cur->content)==0){before->next=cur->next;printf("删除成功\n");break;}}if(cur==NULL){printf("未找到该事件\n");}
}//修改事件时间
void modifyDate(Event *head){char temp[CONTENT_LENGTH];printf("请输入您要查找事件内容:\n");gets(temp);printf("查找中...");for(head=head->next;head!=NULL;head=head->next){if(strcmp(temp,head->content)==0){printf("已找到:\n");printInfo(head);break;}}if(head==NULL){printf("未找到该事件\n");return;}int year;int month;int day;int hour;int minute;int second;printf("进行修改:");printf("请输入日期:yyyy/mm/dd(例如:2018/01/09)\n");scanf("%d %*c %d %*c %d",&year,&month,&day);printf("请输入具体时间:hh:MM:ss(例如:23:01:00)\n");scanf("%d %*c %d %*c %d",&hour,&minute,&second);head->year=year;head->month=month;head->day=day;head->hour=hour;head->minute=minute;head->second=second;printf("修改完成\n");}//遍历链表
void travel(Event *head){head=head->next;while(head!=NULL){printInfo(head);head=head->next;}
}//查找的子菜单,分为 1 遍历 2时间查找 3 事件查找
void find(Event *head){char decide = 'y';                          //定义while变量,函数是否继续进行int num;                                  //定义switch变量,函数跳转到哪个子函数while (decide != 'n'){printf("  ***************************************************\n");printf("  ****  1  遍历  2 时间查找   3 事件查找  4 退出 ****\n");printf("  ***************************************************\n");scanf("%d", &num);fflush(stdin);switch (num){case 1:travel(head);break;case 2:findByDate(head);break;case 3:findByEventContent(head);break;default:decide = 'n';break;}}
}//储存链表信息
void dataSave(Event *head)    //系统的存储函数,由主函数调用
{FILE *fp;char filename[10];printf("请输入存储文件名(包括物理地址)\n");scanf("%s",filename);Event *p = (Event *)malloc(sizeof(Event));p = head->next;if ( (fp=fopen(filename, "w"))== NULL){printf("cannot open file");return;}printf("input data:\n");while (p != NULL){fwrite(p, sizeof(Event), 1, fp); /* 成块写入文件*/p = p->next;}fclose(fp);
}//删除事件的子菜单,分为 1 时间查找删除 2事件查找删除
void eventDelete(Event *head){char decide = 'y';                          //定义while变量,函数是否继续进行int num;                                  //定义switch变量,函数跳转到哪个子函数while (decide != 'n'){printf("  ***************************************************\n");printf("  ****       1 时间查找   2 事件查找  3 退出     ****\n");printf("  ***************************************************\n");scanf("%d", &num);fflush(stdin);switch (num){case 1:deleteByDate(head);break;case 2:deleteByContent(head);break;default:decide = 'n';break;}}
}// 提醒有无即将需要完成的事件
void alert(Event *head){time_t t;struct tm * lt;time (&t);//获取Unix时间戳。lt = localtime (&t);//转为时间结构。printf("当前时间为:");printf ( "%d/%d/%d %d:%d:%d\n",lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);//输出结果int flag=0;for(head=head->next;head!=NULL;head=head->next){if(head->day==lt->tm_mday && head->hour==lt->tm_hour  && head->month==lt->tm_mon+1 && head->year==lt->tm_year+1900){printf("你现在该完成 %s \n",head->content);flag=1;}}if(flag==0){printf("你现在没有要完成的事件\n");}}//菜单列表
void menu(){char decide = 'y';                          //定义while变量,函数是否继续进行int num = 1;                                //定义switch变量,函数跳转到哪个子函数Event *head;                                //定义链表的头指针head = init();                              //给头指针开辟空间head->next = NULL;                          //初始化头指针while (decide != 'n'){printf("  ***************************************************\n");printf("  **********        波比日程管理系统         ********\n");printf("  ***************************************************\n");printf("  **********  1 输入  2 查找  3 修改  4 提醒 ********\n");printf("  **********  5 删除  6 存储  7 排序  8 退出 ********\n");printf("  ***************************************************\n");scanf("%d", &num);fflush(stdin);switch (num){case 1:insert(head);break;case 2:find(head);break;case 3:modifyDate(head);break;case 4:alert(head);break;case 5:eventDelete(head);break;case 6:dataSave(head);break;case 7:head=sort(head);break;default:decide = 'n';break;}};
}int main(){menu();return 0;
}

怎样用C语言去实现一个日程管理系统相关推荐

  1. 用C语言做了一个外卖管理系统

    用C语言做了一个外卖管理系统,则希望可以模拟网上订餐,店家工作,专人管理的过程.并实现注册与登录以及基本信息的输出.各位大佬不喜勿喷 管理员端可以查看店铺信息,店铺信息修改(分为增删改查),处理申请店 ...

  2. C语言程序设计——设计一个学生管理系统(完美运行的程序(●‘◡‘●))

    目录 一.设计目的 二.原理及相关功能 (一)基本框架 (二)功能实现 三.完整代码 四.运行结果 一.设计目的 通过c语言设计一个学生管理系统,要求有直观的主菜单,可以录入学生的信息,实现添加学生信 ...

  3. 用C语言去判断一个字符串是否为回文字符串(简单明了)

    C语言判断回文字符串呀 hello,小伙伴们.好久没写文章了,今天我们来写一下如何用C语言判断字符串是不是回文字符串呢. 大致思路:将字符串逆序赋给另一个字符串,然后比较这两个字符串是否相同.(其实也 ...

  4. 【C语言】制作一个通讯录管理系统

    大家好呀!

  5. 写操作系统用的C语言和写应用程序的C语言不是一个

    我以前看一本书,名叫 30天自制操作系统:大概翻了一下,感觉也不是太难:因为比如,它有一整章在讲,C语言指针.C语言画一个矩形:你要是熟悉C语言的话,指针肯定理解:在没有窗口的情况下,用Turbo C ...

  6. 基于Java+MySQL 实现(Web)日程管理系统【100010222】

    基于Java的日程管理系统开发 摘要 日程管理在日常生活中是十分普通的一件事情,人们无论在生活中还是工作中都会有大大小小.各种各样的事情安排,如果仅仅靠纸张或者自己记录这些事情,往往会遗忘.针对这样的 ...

  7. python管理系统web版_基于Python Flask的web日程管理系统

    日程管理系统文档 本学期的软件工程作业,使用Flask框架做了一个日程管理系统.其中数据库的部署和效果展示在B站有视频解说,戳我去B站. 源码在Github仓库可查看. 建模图例 代码中,一共有两个主 ...

  8. C语言 日程管理系统

    /*期末大作业设计一个机器人管理系统(咳咳,虽然还是管理系统,但是实现的功能可能要难很多) 张三买了一个机器人波比,但是就只是一个机器人,不能进行任何操作,所以需要我们编程去实现他的一些功能, 但是张 ...

  9. Python连续攀升,其他的脚本语言去哪了?

    Python在TIOBE排行榜排名连续攀升,它的优势掩盖了一个严肃的问题:其他的脚本语言去哪儿了?据2017年11月的TIOBE指数显示,其他语言(如Perl,PHP和Ruby)排名正在缓慢下滑. 不 ...

最新文章

  1. CentOS 7下使用Gitolite搭建Git私服
  2. mysql日志的作用_MySQL 日志相关知识总结
  3. 版本更新带来的缓存问题_浏览器缓存原理总结
  4. BZOJ2244 [SDOI2011]拦截导弹 【cdq分治 + 树状数组】
  5. python爬虫天气预报_Python爬虫实例扒取2345天气预报
  6. c语言函数汉诺塔不用move,C语言——汉诺塔问题(函数递归)
  7. android service中显示一个dialog
  8. python常见模块命令(os/sys/platform)
  9. SRM 588 D2 L2:GUMIAndSongsDiv2,冷静思考,好的算法简洁明了
  10. sql server常用函数、常用语句
  11. java集合清空_java 集合删除数据
  12. oracle的sga怎么设置,oracle sga设置
  13. ST-Link驱动安装
  14. Java Applet
  15. java转大写的方法_java将数字转化为大写方法
  16. 传统优化算法VS智能优化算法
  17. 推荐系统-协同过滤在Spark中的实现
  18. UPC-2021个人训练赛第20场-部分题解
  19. “天河一号”掌门人:这一刻中国人等了20多年
  20. xxl-job The access token is wrong.

热门文章

  1. ubuntu下conda在bash和zsh终端下的自动补全设置
  2. java字符串根据分隔符取值_java中解析含分隔符的字符串
  3. PDF转换技巧之如何把WPS文件转换为PDF文件?
  4. Python+Vue计算机毕业设计考试应用系统92fyt(源码+程序+LW+部署)
  5. css高度自适应-父元素随子元素变化
  6. 这22件事世界首富们都在做,受益一生!
  7. 奥鹏东北大学作业答案计算机网络,东北大学11秋学期《计算机网络》在线作业1...
  8. 2021年P气瓶充装考试及P气瓶充装考试技巧
  9. 电子琴节奏包制作_XR情报局:如何在网页端轻松制作Beat Saber关卡?
  10. 如何为3CX配置Patton SN4131 VoIP网关