📄 xuyiyi.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include <bios.h>
#include <ctype.h>
#define KEY_UP 72 /*方向健“↑”的键值*/
#define KEY_DOWN 80 /*方向健“↓”的键值*/
#define KEY_LEFT 75 /*方向键“←”的键值*/
#define KEY_RIGTH 77 /*方向健“→”的键值*/
#define KEY_ESC 27 /*ESC健的键值*/
#define KEY_ALT_F 33 /*ALT+F的键值*/
#define KEY_ALT_X 45 /*ALT+X的键值*/
#define KEY_ENTER 13 /*回车键的键值*/
#define KEY_ALT_M 50 /*ALT+M的键值*/
#define KEY_ALT_A 30 /*ALT+A的键值*/
#define KEY_ALT_C 46 /*ALT+CD的键值*/
#define KEY_ALT_T 20 /*ALT+F的键值*/
#define KEY_ALT_S 31 /*ALT+S的键值*/
#define KEY_ALT_D 32 /*ALT+D的键值*/
#define ASK1(p) do{\
p=(classADDR*)malloc(sizeof(classADDR));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*宏定义获取班级结构空间*/
#define ASK2(p) do{\
p=(stuADDR*)malloc(sizeof(stuADDR));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*宏定义获取学生结构空间*/
#define ASK3(p) do{\
p=(courseADDR*)malloc(sizeof(courseADDR));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*宏定义获取课程结构空间*/
#define ASK4(p) do{\
p=(struct credit*)malloc(sizeof(struct credit));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*自定义获取学分信息结构*/
#define ASK5(p) do{\
p=(struct averagest*)malloc(sizeof(struct averagest));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*自定义学生加权分结构*/
#define ASK6(p) do{\
p=(struct totalcl*)malloc(sizeof(struct totalcl));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*自定义获取班级平均结构*/
#define ASK7(p) do{\
p=(struct averagecl*)malloc(sizeof(struct averagecl));\
if(p==NULL){printf("memory fail!");exit(-1);}\
}while(0)
/*自定义获取班级加权的函数*/
typedef struct class_info{
char NO[10]; /*班级编号*/
char master[15]; /*辅导员姓名*/
char major[20]; /*专业名称*/
short num; /*班级学生人数*/
struct class_info *next;
}classADDR; /*班级结构*/
/*----------------------------班级结构-----------------------------*/
typedef struct student_info{
char ID[15]; /*学号*/
char name[15]; /*学生姓名*/
char sex[3]; /*性别,男生为Me,女生为Wo*/
int age; /*年龄*/
char NO[10]; /*班级编号*/
char major[20]; /*专业*/
char accommodiation[25]; /*宿舍*/
char address[25]; /*家庭住址*/
char burthday[9]; /*出生年月,格式如:86。06。26*/
char inday[9]; /*入学年月*/
char tel[23]; /*联系电话,如有两个,其间用\隔开*/
float average; /*加权分*/
int index; /*名次*/
struct student_info *next;
}stuADDR;
/*--------------------------学生结构----------------------------*/
struct recourse{
char term[15]; /*重修学期,如2005-2006-2代表2005到2006学年第二学期*/
int re_score; /*重修分数*/
int re_times; /*重修次数*/
};
typedef struct course_info{
char ID[15];
char NO[10];
char code[10]; /*课程编号*/
char course_name[20]; /*课程名称*/
char course_nature[10]; /*课程性质,必修require选修elective*/
char course_type[10]; /*课程类型,基础课程bacsic专业课程common*/
int test_score; /*考试分数*/
int daly_score; /*平时成绩*/
float total_score; /*总成绩*/
int credit; /*学分*/
int relearn; /*重修情况,1重修0无重修*/
struct recourse info;
struct course_info*next;
}courseADDR; /*课程信息*/
/*----------------------------课程结构-----------------------------*/
struct credit{
char id1[15];
int t_credit;
struct credit *next;
};
struct averagest{
char id1[15];
char no[10];
int t_credit;
float total;
float average;
struct averagest *next;
};
struct totalcl{
char no[10];
char code[10];
float total;
int a;
struct totalcl *next;
};
struct averagecl{
char no[10];
float average;
int a;
struct averagecl *next;
};
/*--------------以上为用于统计计算时的辅助计算结构-------------*/
extern int count1=0; /*全局计数变量*/
extern int count2=0;
extern int count3=0;
extern int savedtag1=1; /*全局保存标志*/
extern int savedtag2=1;
extern int savedtag3=1;
void creatbasic(classADDR **);
void saveclass(classADDR**);
void displayclass(classADDR **);
void creatsecond(stuADDR **);
void savestu(stuADDR **);
void displaystu(stuADDR **);
void creatthird(courseADDR **);
void savecourse(courseADDR **);
void displaycourse (courseADDR **);
classADDR ** loadclass(void);
stuADDR **loadstu(void);
courseADDR **loadcourse(void);
void search_ID(stuADDR**);
void search_name(stuADDR**);
void search_age(stuADDR**);
void search_index(stuADDR**);
void sort_ID(stuADDR**);
void sort_up(stuADDR**);
void sort_down(stuADDR**);
void insertclass(classADDR**);
void insertclass(classADDR**);
void insertstu(stuADDR**);
void insertcourse(courseADDR**);
void deleteclass(classADDR**);
void deletestu(stuADDR**);
void deletecourse(courseADDR**);
void deletestuc(stuADDR**);
void deletecous(courseADDR**);
void deletecouc(courseADDR**);
void modifyclass(classADDR**);
void modifystu(stuADDR**);
void modifycourse(courseADDR**);
void total (courseADDR **);
void credit(courseADDR **);
void failstu (courseADDR **);
void averagestu (courseADDR **);
void classtotal(courseADDR **);
void classaverage (courseADDR **);
void link_fileclass (void);
void link_filestudent (void);
void link_filecourse (void);
/*------------------------以上为学籍管理的函数说明---------------------------*/
int Get_KeyValue();
int Draw_MainMenu();
void alt_f (void);
void alt_d (void);
void alt_m (void);
void alt_a (void);
void alt_c (void);
void alt_s (void);
void alt_t (void);
void first (void);
void exitd();
void Box(int startx,int starty,int hight,int width);
char *menu[]={"File","Display","Modify","Add","Clear","Search","To_sort"};
char *red[]={"F","D","M","A","C","S","T"};
char *file[]={"Load ","New","Save ","Calculator","Quit ALT+X"};
char *modify[]={"Class ","Student","Course"};
char *add[]={"Class ","Student","Course"};
char *display[]={"Class ","Student","Course"};
char *clear[]={"Class ","Student","Course"};
char *search[]={"By name","By ID","By index","By age"};
char *to_sort[]={"By ID","Index up","Index down"};
char *red1[]={"L","N","S","C","Q"};
char *red2[]={"C","S","C"};
char *red3[]={"B","B","B","B"};
char *red4[]={"B","I","I"};
char *red5[]={"C","S","C","C","D","F"};
char *calculator[]={"Course Total","Student Average","Class Total","Class Average",
"Done Credit","Fail Student"};
char buf[17*13*2],buf1[16*2],buf2[40*13*2],buf3[80*25*2],buf4[30*2],buf5[17*13*2];
/*----------------------以上为菜单函数的说明------------------*/
int i,j,k,key,x,y,l,n,a;
struct class_info *head=NULL;
struct student_info *head1=NULL;
struct course_info *head2=NULL;
void main()
{
first();
clrscr();
textbackground(1);
clrscr();
Draw_MainMenu();
gettext(4,1,19,8,buf5); /*画主菜单*/
gotoxy(4,1);
window(4,1,8,1);
textbackground(0);
textcolor(15);
clrscr();
cprintf("%s",menu[0]);
while(1)
{
key=0;
while(bioskey(1)==0); /*循环等待,直到有键按下为止 */
key=Get_KeyValue(); /*获取键值*/
if(key==KEY_ALT_X) /*若按的是Alt+X,退出程序*/
{
exitd();
exit(0);
}
if(key==KEY_RIGTH||key==KEY_LEFT) /*响应左右键*/
{
i=0,j=6,x=4;
gotoxy(4,1);
window(4,1,8,1);
textbackground(15);
textcolor(0);
clrscr();
cprintf("%s",menu[0]);
while(key!=KEY_ALT_X&&key!=KEY_ENTER&&key!=KEY_DOWN)
{
l=strlen(menu[i]);
if(i==6)n=strlen(menu[0]);
else n=strlen(menu[i+1]);
if(i==0)j=strlen(menu[6]);
else j=strlen(menu[i-1]);
if(key==KEY_RIGTH) /*响应子向右*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -