📄 data.c
字号:
#include <io.h>
#include <bios.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <bios.h>
#include <fcntl.h>
#include <mem.h>
#include <math.h>
#include <string.h>
#include <malloc.h>
#include <time.h>
typedef unsigned short num_range1;
typedef unsigned short num_range2;
typedef unsigned short error_num;
#define TRUE 1
#define FALSE 0
#define nil 0
typedef struct node *stu_p;
struct node {
num_range1 number;
char name[11];
char sex;
struct date birthdate;
num_range2 experience;
num_range2 force;
num_range2 smartness;
struct node *front;
struct node *next;
} ;
FILE *db_file; //text文件类型出错
struct node *head,
*current,
*last;
int count,
tmp;
char *command_line;//user command
/*字段缓冲变量*/
num_range1 number_c;
char name_c[11];
num_range2 experience_c;
char sex_c;
num_range2 force_c;
num_range2 smartness_c;
struct date birthdate_c;
/*过程和函数*/
student_database(); //是主函数
//布尔类型翻译出错
////////////////////////////////////
int check_number();
int check_sex();
int check_birthdate();
int check_experience();
int check_force();
int check_smartness();
///////////////////////////////////
error_num check_record();
int condition_select();
void output_title();
void output_it();
void modify_it();
void swap_it();
void delete_it();
void add_record();
void insert_it();
void save_record();
void close_database();
void output_record();
void del_record();
void find_record();
void sort_record();
void modify_record();
void read_record();
void input_record();
void insert_record();
void command_select();
void optimize();
int check_number (num_range1 check_object)
{
int function;
if ((check_object >= 1) && (check_object <= 1000))
function = TRUE;
else
function = FALSE;
return(function);
}
int check_sex (char check_object)
{
int function;
if (check_object=='m'||check_object=='M'||check_object=='f'||check_object=='M')
function = TRUE;
else
function = FALSE;
return(function);
}
int check_birthdate (struct date check_object)
{
int function;
if ((check_object.da_year >= 1000) && (check_object.da_year <= 3000))
if (check_object.da_mon==1||check_object.da_mon==3||
check_object.da_mon==5||check_object.da_mon==7||check_object.da_mon==8||
check_object.da_mon==10||check_object.da_mon==12)
if (check_object.da_day<=31&&check_object.da_day>=1)
function = TRUE;
else
function = FALSE;
else if (check_object.da_mon==4||check_object.da_mon==6||
check_object.da_mon==9||check_object.da_mon==11)
if (check_object.da_day<=30&&check_object.da_day>=1)
function = TRUE;
else
function = FALSE;
else if (check_object.da_mon == 2)
if ((check_object.da_year % 4 == 0) &&
(check_object.da_year % 100 != 0) ||
(check_object.da_year % 400 == 0))
if (check_object.da_day<=29&&check_object.da_day>=1)
function = TRUE;
else
function = FALSE;
else if (check_object.da_day<=28&&check_object.da_day>=1)
function = TRUE;
else
function = FALSE;
else
function = FALSE;
else
function = FALSE;
return(function);
}
int check_experience (num_range2 check_object)
{
int function;
if (check_object<=100&&check_object>=0)
function = TRUE;
else
function = FALSE;
return(function);
}
int check_force (num_range2 check_object)
{
int function;
if (check_object<=100&&check_object>=0)
function = TRUE;
else
function = FALSE;
return(function);
}
int check_smartness (num_range2 check_object)
{
int function;
if (check_object<=100&&check_object>=0)
function = TRUE;
else
function = FALSE;
return(function);
}
error_num check_record (num_range1 *number_c,char *sex_c,struct date *birthdate_c,
num_range2 *experience_c,num_range2 *force_c,num_range2 *smartness_c)
{
int err_p;
error_num function;
err_p = FALSE; /*CHECK NUMBER*/
if ((err_p == FALSE))
if (check_number(*number_c))
err_p = FALSE;
else {
err_p = TRUE;
function = 1;
} /*CHECK SEX*/
if ((err_p == FALSE))
if (check_sex(*sex_c))
err_p = FALSE;
else {
err_p = TRUE;
function = 2;
} /*CHECK BIRTHDATE_C*/
if ((err_p == FALSE))
if (check_birthdate(*birthdate_c))
err_p = FALSE;
else {
err_p = TRUE;
function = 3;
} /*CHECK experience*/
if ((err_p == FALSE))
if (check_experience(*experience_c))
err_p = FALSE;
else {
err_p = TRUE;
function = 4;
} /*CHECK force*/
if ((err_p == FALSE))
if (check_force(*force_c))
err_p = FALSE;
else {
err_p = TRUE;
function = 5;
} /*CHECK smartness*/
if ((err_p == FALSE))
if (check_smartness(*smartness_c))
err_p = FALSE;
else {
err_p = TRUE;
function = 6;
} /*RETURN ERR_NUMBER*/
if (err_p == FALSE)
function = 0;
return(function);
}
int condition_select (char *condition_message)
{
int condition_code;
int function;
printf("\n");
printf("%s\n",condition_message);
printf(" 1 record 2 No 3 name 4 sex\n");
printf(" 5 birthday 6 experience 7 force 8 smartness\n");
printf("\n");
printf("choise:(1~8)");
scanf("%d",&condition_code);
function = condition_code;
return(function);
}
void output_title(void)
{
printf("\n");
printf(" record no name sex birthday experience force smartness\n");
}
void output_it (struct node *c,int n)
{
printf("%7d",n); /*数据输出*/
printf("%7d",c->number);
printf("%10s",c->name);
printf("%6c",c->sex);
printf("%6d/%2d/%2d",c->birthdate.da_year,c->birthdate.da_mon,
c->birthdate.da_day);
printf("%10d",c->experience);
printf("%10d",c->force);
printf("%10d",c->smartness);
printf("\n");
}
void modify_it (struct node *c,struct node *l,int n)
{
printf("modify %d input -1 ,still\n",n);
printf("record %d\n",n);
printf("No:");
scanf("%d",&number_c);
printf("name:");
gets(name_c);
gets(name_c);
printf("sex(M,F):");
scanf("%c",&sex_c);
printf("birthda_day(1978 16 1):");
scanf("%d %d %d",&birthdate_c.da_year,&birthdate_c.da_day,&birthdate_c.da_mon);
printf("experience:");
scanf("%d",&experience_c);
printf("force:");
scanf("%d",&force_c);
printf("smartness:");
scanf("%d",&smartness_c);
printf("\n");
if (number_c != - 1)
if (check_number(number_c))
c->number = number_c;
else
printf("out record\n");
if (strcmp(name_c,"-1") != 0)
strcpy (c->name,name_c);
if (sex_c != '-')
if (check_sex(sex_c))
c->sex = sex_c;
else
printf("sex error\n");
if ((birthdate_c.da_year != - 1) && (birthdate_c.da_mon != - 1) &&
(birthdate_c.da_day != - 1))
if (check_birthdate(birthdate_c))
c->birthdate = birthdate_c;
else
printf("birthday error\n");
if (experience_c != - 1)
if (check_experience(experience_c))
c->experience = experience_c;
else
printf("experience error\n");
if (force_c != - 1)
if (check_force(force_c))
c->force = force_c;
else
printf("force error\n");
if (smartness_c != - 1)
if (check_smartness(smartness_c))
c->smartness = smartness_c;
else
printf("smartness error\n");
}
void swap_it (struct node **current,struct node **last,struct node **c_bak,struct node **l_bak)
{
/*用于排序*/
struct node *tmp_c,
*tmp_l;
/*使C_BAK总是指向链表尾部*/
if (((*current)->front->front == nil) && (*last == nil)) {
/*STATUS=4*/
/*ONLY TWO*/ *current = (*current)->front;
head = *c_bak;
(*current)->front = head;
(*c_bak)->next = *current;
(*current)->next = nil;
*last = nil;
*c_bak = *current;
*l_bak = nil;
} /*LAST ONE*/
else if (((*current)->front->front != nil) && (*last == nil)) {
*current = (*current)->front;
(*current)->front->next = *c_bak;
(*c_bak)->front = (*current)->front;
(*c_bak)->next = *current;
(*current)->front = *c_bak;
(*current)->next = nil;
*last = (*current)->next;
*c_bak = *current;
*l_bak = *last;
} /*SECOND ONE*/
else if (((*current)->front->front == nil) && (*last != nil)) {
head = *current;
*current = (*current)->front;
head->next->front = *current;
(*current)->next = head->next;
head->front = nil;
head->next = *current;
(*current)->front = head;
*last = (*current)->next;
} /*MEDIUM*/
else {
tmp_c = *current;
*current = (*current)->front;
(*current)->front->next = tmp_c;
tmp_c->next->front = *current;
tmp_c->front = (*current)->front;
(*current)->next = tmp_c->next;
tmp_c->next = *current;
(*current)->front = tmp_c;
}
}
void delete_it (struct node **current,struct node **last)
{
/*可以自动后移指针*/
struct node *tmp;
if ((*current == head) && (*last == nil)) { /*statue = 4*/
/*ONLY ONE*/
free(*current);
head = nil;
*current = nil;
*last = nil;
count = 0;
} /*LAST ONE*/
else if ((*current != head) && (*last == nil)) {
*current = (*current)->front;
free(*current);
(*current)->next = *last;
count = count - 1;
} /*FIRST ONE*/
else if ((*current == head) && (*last != nil)) {
head = *last;
free(*current);
*current = head;
(*current)->front = nil;
*last = (*current)->next;
count = count - 1;
}
else {
(*current)->front->next = (*current)->next;
(*current)->next->front = (*current)->front;
tmp = *current;
*current = *last;
*last = (*current)->next;
free(tmp);
tmp = nil;
count = count - 1;
} /*IF*/
}
/*PROCEDURE*/
void add_record (void)
{
struct node *tmp;
if (head == nil) {
tmp = (stu_p) malloc (sizeof(struct node));
head = tmp;
head->next = nil;
current = head;
current->front = nil;
last = current->next;
}
else {
tmp = (stu_p) malloc (sizeof(struct node));
tmp->next = nil;
current->next = tmp;
tmp->front = current;
current = tmp;
last = current->next;
} /*数据赋值*/
current->number = number_c;
strcpy (current->name,name_c);
current->sex = sex_c;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -