#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <time.h>
#include <windows.h>
#include<mmsystem.h>
#pragma comment(lib,"Winmm.lib")
int savecourse();
void change();
void newcourse();
void print();
char course[99][99][99];
int MultiplicationTable();
int common_mon[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int leap_mon[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
void color(const unsigned short textColor)
{
if(textColor>=0 && textColor<=15)
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), textColor);
else
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
void menu()
{
printf("╔══════════════学生系统菜单══════════════╗\n");
printf("║---------------1.显示课表---------------║\n");
printf("║---------------2.修改课表---------------║\n");
printf("║---------------3.新建课表---------------║\n");
printf("║---------------4.系统时间---------------║\n");
printf("║---------------5.数学计算---------------║\n");
printf("║---------------6.乘法口诀---------------║\n");
printf("║---------------7.公元年历---------------║\n");
printf("║---------------8.版本信息---------------║\n");
printf("║---------------9.制作人员---------------║\n");
printf("╚═══════════════0.退出程序═══════════════╝\n");
}
void print()
{
FILE *fp;
char time[5][99]={"1-2节(8:00-9:40)","3-4节(10:15-11:55)","5-6节(14:00-15:40)","7-8节(16:15-17:55)","9-10节(19:00~20:40)"};
int i,j;
if((fp=fopen("course.txt","r"))==NULL)
{
printf("课表文件不存在,即将创建空课表\n");
savecourse();
}
printf("-----------------------------------------------------------------------------------------------------------\n");
printf("星期 一 二 三 四 五 六 日\n");
printf("-----------------------------------------------------------------------------------------------------------\n");
for(i=0;i<6;i++)
{
printf("%10s\t",time[i]);
for(j=0;j<7;j++)
{
fscanf(fp,"%s",course[i][j]);
printf("%-13s",course[i][j]);
}
printf("\n");
printf("-----------------------------------------------------------------------------------------------------------\n");
}
fclose(fp);
printf("\n\n");
}
void change()
{
char temp[10];
char s;
int date,time;
char recourse[20];
printf("输入你想要改的课程时间:");
scanf("%d",&date);
while(date<1||date>7)
{
printf("输入时间不合理,重新输入");
scanf("%d",&date);
}
printf("输入你想要改的课程课次:");
scanf("%d",&time);
while(date<1||date>7)
{
printf("输入时间不合理,重新输入");
scanf("%d",&time);
}
printf("你要将原来的课程修改为:");
scanf("%s",recourse);
strcpy(temp,recourse);
getchar();
strcpy(course[time-1][date-1],recourse);
printf("请输入1确认保存:");
scanf("%c",&s);
if(s=='1')
savecourse();
else
{
strcpy(course[time-1][date-1],temp);
}
}
int savecourse()
{
FILE *fp;
int i,j;
if((fp=fopen("course.txt","w+"))==NULL)
{
fp = fopen("course.txt","w+");
printf("未找到课程表文件,已创建新文件,请重新打开程序以初始化");
exit(1);
}
for(i=0;i<6;i++)
{
for(j=0;j<7;j++)
fprintf(fp,"%-13s",course[i][j]);
fprintf(fp,"\n");
}
fclose(fp);
printf("保存成功!\n");
}
void newcourse()
{
int i,j;
printf("请一次输入一周的课程按回车开始\n");
for(i=0;i<7;i++)
{
printf("请按从早到晚的顺序输入第%d天的课程",i+1);
for(j=0;j<5;j++)
scanf("%s",course[j][i]);
}
savecourse();
}
int PCtime()
{
time_t t;
struct tm * lt;
time (&t);
lt = localtime (&t);
printf ( "%d/%d/%d %d:%d:%d\n" ,lt->tm_year+1900, lt->tm_mon, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec);
}
int calculator()
{
float a,b,c;
char d;
int sign=0;
printf("输入数字与字符并按回车进行计算,进行一次计算后程序自动退出\n");
scanf("%f%c%f",&a,&d,&b);
if(d=='+'){
c=a+b;
}
else if(d=='-'){
c=a-b;
}
else if(d=='*'){
c=a*b;
}
else if(d=='/'&&b!=0) {
c=a/b;
}
else if(d=='/'&&b==0) {
printf("dat is 0!Error!\n");
}
else {
printf("Error!\n");
}
printf("%.2f%c%.2f=%.2f\n",a,d,b,c);
}
int MultiplicationTable()
{
int i,j,k;
for(i=1;i<=9;i++)
{
for(k=1;k<i;k++)
printf(" ");
for(j=i;j<=9;j++)
{
printf("%4d",i*j);
}
printf("\n");
}
}
void printBlank(int n)
{
if(n==7) n=0;
for(int i=0; i<n; i++)
printf(" ");
}
void printCalendar(int weekday, int *p)
{
for(int i=0; i<12; i++){
printf("=================%d月=====================\n", i+1);
printf("Sun Mon Tue Wed Thu Fri Sat\n");
printBlank(weekday);
for(int j=1; j<=p[i]; j++){
printf("%-6d", j);
if(weekday==6) printf("\n");
weekday++;
if(weekday==8) weekday=1;
}
printf("\n\n");
}
}
int calender()
{
int y;
int sign=1;
printf("请输入要查询的公元年份(大于公元一年):");
while(scanf("%d", &y)!=EOF){
int temp = 1;
for(int i=1; i<=y; i++){
if(temp > 7) temp -= 7;
if((i%4==0&&i%100!=0)||i%400==0){
if(i==y) printCalendar(temp, leap_mon);
temp += 2;
}
else{
if(i==y) printCalendar(temp, common_mon);
temp++;
}
}
break;
}
}
void main()
{
printf("**********欢迎使用21世纪学生终端**********\n");
printf("*************当前版本v0.10.6α*************\n");
int select;
int sign=1;
char contin;
FILE *fp;
int i,j;
if((fp=fopen("course.txt","r"))==NULL)
{
printf("文件夹中没有课程表文件,请先输入1或3进行新建课表\n");
}
for(i=0;i<6;i++)
{
for(j=0;j<7;j++)
fscanf(fp,"%s",course[i][j]);
}
fclose(fp);
while(sign)
{
menu();
printf("请输入操作:");
scanf("%d",&select);
while(select<0||select>9)
{
printf("你输入的操作不合法,请重新输入");
scanf("%d",&select);
}
switch(select)
{
case 1:print();break;
case 2:change();sign=1;break;
case 3:newcourse();break;
case 4:PCtime();sign=1;break;
case 5:calculator();sign=1;break;
case 6:MultiplicationTable();sign=1;break;
case 7:calender();sign=1;break;
case 8:printf("当前版本0.10.6α\n");
printf("v0.10.1α------第一个能用的版本,只有课程表功能,可以修改并保存课程表,需要手动创建课程表文件\n");
printf("v0.10.2α------检测到缺少课程表文件可以自动创建,并要求输入课表\n");
printf("v0.10.3α------添加时钟功能,但是无法实时显示\n");
printf("v0.10.4α------添加计算器,对文本进行小修改以改善美观度\n");
printf("v0.10.5α------更改了题头出现次数,现在它只会出现一次\n");
printf("v0.10.6α------添加万年历功能,可以输出任意公元后的公元年历\n");
break;
case 9:color(14);
printf("作者:\n");
printf("淡水鱼\n");
color(2);
printf("特别鸣谢:\n");
color(4);
printf("超逊的彬彬\n");
color(3);
printf("Su_Peng\n");
color(6);
printf("Febrie(>﹏<)\n");
color(9);
printf("横扫八方狂龙杀神\n");
color(12);
printf("三木\n");
color(16);
break;
case 0:printf("程序已退出");sign=0;break;
default:break;
}
}
}