c program
来源:互联网 发布:捷易通软件可靠吗 编辑:程序博客网 时间:2024/05/17 23:33
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxRec 10
typedef struct
{
char num[4];
int offset;
} IdxType;
typedef struct
{
char num[4];
char name[8];
char sex;
int age;
char address[12];
char department[12];
char speciality[12];
}StudType;
void GetMainFile()
{
int n = 2;
FILE *mfile;
StudType st[MaxRec] = {{"106", "WangHua", 'f', 23, "new street", "science", "Computer"},
{"123", "HanLie", 'M', 24, "Old Street", "Culture", "China"}};
if((mfile = fopen("main.file", "wb")) == NULL)
{
printf(" >>CAN'T OPEN MAIN DATA FILE!/n");
exit(0);
}
fwrite(st, sizeof(StudType), n, mfile);
fclose(mfile);
}
void DispMainFile()
{
int i, n, len;
FILE *mfile;
StudType st;
if((mfile = fopen("main.file", "rb")) == NULL)
{
printf(" >>CAN'T OPEN MAIN DATA FILE!/n");
exit(0);
}
fseek(mfile, 0, SEEK_END);
len = ftell(mfile);
n = len / sizeof(StudType);
rewind(mfile);
printf(" >>MAIN DATA FILE:/n");
for(i = 0; i < n; i++)
{
fread(&st, sizeof(StudType), 1, mfile);
printf(" >>%-3d%-5s%-8s%c%3d %-13s%-13s%-13s/n",i + 1, st.num, st.name, st.sex, st.age, st.address,
st.department, st.speciality);
}
fclose(mfile);
}
void DispIdxFile()
{
int i, n, len;
FILE *idxfile;
IdxType idx;
if((idxfile = fopen("index.file", "rb")) == NULL)
{
printf(" >>CAN'T OPEN INDEX FILE!/n");
exit(0);
}
fseek(idxfile, 0, SEEK_END);
len = ftell(idxfile);
n = len / sizeof(IdxType);
rewind(idxfile);
printf(" >>INDEX FILE:/n");
for(i = 0; i < n; i++)
{
fread(&idx, sizeof(IdxType), 1, idxfile);
printf(" >>%8s%8d/n", idx.num, idx.offset);
}
fclose(idxfile);
}
void BubbleSort(IdxType idx[], int n)
{
int i, j;
IdxType tmp;
int exchange;
for(i = 0; i < n - 1; i++)
{
exchange = 0;
for(j = n - 2; j >= i; j--)
{
if(strcmp(idx[j + 1].num, idx[j].num) < 0)
{
tmp = idx[j + 1];
idx[j + 1] = idx[j];
idx[j] = tmp;
exchange = 1;
}
if(exchange == 0)
return;
}
}
}
void BuildIdxFile()
{
FILE *mfile, *idxfile;
IdxType idx[MaxRec];
StudType st;
int i, len, n, j = 0;
if((mfile = fopen("main.file", "rb")) == NULL)
{
printf(" >>CAN'T OPNE MAIN DATA FILE!/n");
exit(0);
}
if((idxfile = fopen("index.file", "wb")) == NULL)
{
printf(" >>CAN'T FOUND INDEX DATA FILE!/n");
exit(0);
}
fseek(mfile, 0, SEEK_END);
len = ftell(mfile);
n = len / sizeof(StudType);
rewind(mfile);
for(i = 0; i < n; i++)
{
fread(&st, sizeof(StudType), 1, mfile);
strcpy(idx[j].num, st.num);
idx[j].offset = i + 1;
j++;
}
fclose(mfile);
BubbleSort(idx, n);
fwrite(idx, sizeof(IdxType), n, idxfile);
fclose(idxfile);
}
void ReadIdxFile(IdxType idx[], int *n)
{
int len;
FILE *idxfile;
if((idxfile = fopen("index.file", "rb")) == NULL)
{
printf(" >>CAN'T OPEN INDEX FILE!/n");
exit(0);
}
fseek(idxfile, 0, SEEK_END);
len = ftell(idxfile);
rewind(idxfile);
*n = len / sizeof(IdxType);
fread(idx, sizeof(IdxType), *n, idxfile);
fclose(idxfile);
}
int BinSearch(IdxType idx[], int n, char no[])
{
int mid, low, high, comp;
low = 0;
high = n - 1;
while(low <= high)
{
mid = (low + high) / 2;
comp = strcmp(idx[mid].num, no);
if(comp > 0)
high = mid - 1;
else if(comp < 0)
low = mid + 1;
else
return idx[mid].offset;
}
return -1;
}
void Find()
{
FILE *mfile;
IdxType idx[MaxRec];
StudType st;
char no[4];
int i, n;
if((mfile = fopen("main.file", "rb+")) == NULL)
{
printf(" >>CAN'T OPEN MAIN DATA FILE!/n");
exit(0);
}
ReadIdxFile(idx, &n);
printf(" >>INPUT NUMBER: ");
scanf("%s", no);
rewind(mfile);
i = BinSearch(idx, n, no);
if(i == -1)
{
printf(" >>NOT EXIST STUDENT OF NUMBER!/n");
exit(0);
}
fseek(mfile, (i - 1)*sizeof(StudType), SEEK_SET);
fread(&st, sizeof(StudType), 1, mfile);
fseek(mfile, (i - 1) * sizeof(StudType), SEEK_SET);
printf(" >>%-3d%-5s%-8s%c%3d%-13s%-13s%-13s/n", i, st.num, st.name, st.sex,
st.age, st.address, st.department, st.speciality);
fclose(mfile);
}
void Update()
{
FILE *mfile;
IdxType idx[MaxRec];
StudType st;
char no[4], newaddr[30];
int i, n;
if((mfile = fopen("main.file", "rb+")) == NULL)
{
printf(" >>CAN'T OPEN MAIN DATA FILE!/n");
exit(0);
}
ReadIdxFile(idx, &n);
printf(" >>INPUT NUMBER:");
scanf("%s", no);
rewind(mfile);
i = BinSearch(idx, n, no);
if(i == -1)
{
printf(" >>NOT EXIST THE STUDENT!/n");
exit(0);
}
fseek(mfile, (i - 1) * sizeof(StudType), SEEK_SET);
fread(&st, sizeof(StudType), 1, mfile);
printf(" >>NEW ADDRESS:");
scanf("%s", newaddr);
strcpy(st.address, newaddr);
fseek(mfile, (i - 1) * sizeof(StudType), SEEK_SET);
fseek(mfile, -(long)sizeof(StudType), SEEK_CUR);
fwrite(&st, sizeof(StudType), 1, mfile);
printf(" >>%-3d%-5s%-8s%c%3d%-13s%-13s%-13s/n", i, st.num, st.name,
st.sex, st.age, st.address, st.department, st.speciality);
fclose(mfile);
}
int main(int argc, char **argv)
{
int sel = 1;
while(sel != 0)
{
printf("1:NEW 2:DISPLAY MAIN FILE 3:DISPLAY INDEX FILE 4:SELECT 5:CHANGE ADDRESS 0:QUIT/n");
scanf("%d", &sel);
switch(sel)
{
case 1:
GetMainFile();
BuildIdxFile();
break;
case 2:
DispMainFile();
break;
case 3:
DispIdxFile();
break;
case 4:
Find();
break;
case 5:
Update();
break;
}
}
return 0;
}
- c program
- 2 c program idioms
- python invoke C program
- linux c program link....
- FTP_client c program
- first program by c
- C program:"extern" skills
- append c program
- Some simple c program
- The C program language
- [c++] The BookStore Program
- C Program Memory Layout
- #import"C:\Program Files
- C. Short Program
- How C program call COBOL gnt program
- Memory partition in C program
- C HOW TO PROGRAM!中
- lseek() sample program in C
- .X文件中的AnimationSet分析
- 网络游戏的位置同步
- 邮件里的那么点事B
- 用python 实现江苏“七位数”兑奖查询
- The C++ Standard Library 学习笔记(一)第7章
- c program
- 去除图片背景函数GdiTransparentBlt
- 转的别人的(JS来读取XML)
- RUBY中的变量(记录在此,避免忘记^-^)
- 单身宣言
- 环保署
- 老杳与老杳吧:集成电路社区
- vs2005 GZipStream 压缩和解压缩
- 赵青-《剑侠情缘网络版》开发回顾