打印

[求助] 求助看看这个c语言程序怎么编写

求助看看这个c语言程序怎么编写

建立数据文件
1. 输入N个(如N=6)学生的个人资料(包括:学号、姓名及三门功课“数学、英语、C程序设计”的成绩);
2. 将上述学生资料(数据自定)存盘,形成数据文件;
3. 若某学生调入,将其相关资料追加到数据库中;
4. 若某学生调出,将其相关资料从数据库中删除。
二)使用所建数据文件资料:
1. 计算每个学生的总分及平均分;
2. 按总分由大到小排序(学号、姓名、数学、英语、C程序设计等相关数据随之调整);
3. 输出排序结果。
按姓名检索,输出其相关资料或输出‘查无此人’的信息
谢谢大家了帮忙
写个源代码吧

TOP

正在学c,以上问题应该涉及到数组问题吧,等强人解答,顶上去。
存在的就是合理的!

TOP

初级学习中

TOP

学习~~~

TOP

把你的 每个数据封装成 结构体
至于排序 使用递归把

TOP

不懂,初学者

TOP

这个还是会的说,不急的话,有时间了帮你编个

TOP

我们上个学期的作业,我写的程序,千万理解不要照抄!!!

完成一个DOS环境下的学生学习成绩的录入和分析系统,具体功能如下(如出现汉字请用汉语拼音或英语代替):
1. 具有菜单界面;
2. 具有将成绩写入文件、读出文件的功能(文件路径 “d:\score.txt”);
文件中内容: 课程、学生姓名、课程成绩。
如: C Language wangbin 78
C Language Zhangdong 50
C Language Liyuan 79
C Language Qingdawei 88
Database wangbin 56
Database Liyuan 77
Database Qingdawei 90

3. 合理安排下述各功能:
 数据添加
 求平均成绩,最高、低成绩,不及格、及格人数,不及格、及格学生的名单等;
 排序功能;


要求
1. 代码格式合理,清晰可读;
2. 代码中应有适当的代码说明;
3. 合理的设计程序块(函数);
4. 功能达到要求;
5. 简单的使用说明书。

为完成该程序设计,请先理解并运行参考程序。

#include<stdio.h>

int i=0, num=0;
struct student {
char course[12];
char name[15];
int score;
}stu[100];

/* 0 - Display help information. */ void disphelp() {
printf("\n");
printf(" This is a students' grade records & analysis system. In the system, you can \n");
printf("read and save student's score in a file. Moreover, you can calculate the \n");
printf("average score of each student or each course, calculate the highest/lowest \n");
printf("score, the students' name who pass or do NOT pass the exam, and also sort by \n");
printf("course/name/score.\n");
printf("\n Please press 0~9 to make your choice, and then follow the instructions.\n");
}

/* 1 - Read records from file "score.txt". */ void readrecord() {
FILE *fp;

/* open score.txt file in READ ONLY mode. */ fp=fopen("D:\\score.txt", "rt");
if (fp==NULL) {
printf("\n Can NOT open this file, please check the file D:\score.txt exists.");
exit(1);
}

printf("\n\nCourse Student Name Score\n\n");
while (feof(fp)==0) {
fscanf(fp, "%s%s%d", stu[num].course, stu[num].name, &stu[num].score);
printf("%-12s%-15s%d\n", stu[num].course, stu[num].name, stu[num].score);
num++;
}
fclose(fp);
}

/* 2 - Add a record to the file score.txt */ void addrecord() {
char course[12], name[15];
int score=0;
FILE *fp;

/* open score.txt file in READ/WRITE mode. */ fp=fopen("D:\\score.txt", "at+");
printf("\n\nAdd a record:");
printf("\nCourse(1~12Bytes):");
scanf("%s", course);
printf("\nStudent Name(1~15Bytes):");
scanf("%s", name);
printf("\nScore(Integer):");
scanf("%d", score);
fprintf(fp, "%c%-12s%-15s%d", '\n', course, name, score);
fclose(fp);
}

/* 3 - Calculate the average score.
type - 选择计算类型,0为计算所有成绩的平均成绩,1为计算某科平均成绩,
2为计算某学生平均成绩 */ float averscore(int type) {
int cnum=0, nnum=0;
float sum=0, average=0;
char course[12], name[15];

if (type==0) {
for (i=0; i<num; i++) {
sum+=stu.score;
}
average=sum/num;
}
else if (type==1) {
printf("Please input the course name(1~12Bytes):\n");
scanf("%s", course);
for (i=0; i<num; i++) {
if (strcmp(stu.course, course)==0) {
sum+=stu.score;
cnum++;
}
}
average=sum/cnum;
}
else if (type==2) {
printf("Please input the student name(1~15Bytes):\n");
scanf("%s", name);
for (i=0; i<num; i++) {
if (strcmp(stu.name, name)==0) {
sum+=stu.score;
nnum++;
}
}
average=sum/nnum;
}
else
printf("You input a WRONG number, please select from 0~2.");
return average;
}

/* 4 - The highest score.
5 - The lowest score.
type - 选择查询类型,0为查询所有成绩,1为查询某科成绩,2为查询某学生成绩
horl - 选择查询最高成绩还是最低成绩 */ int hnlscore(int type, int horl) {
int high=0, low=100;
char course[12], name[15];

if (type==0) {
for (i=0; i<num; i++) {
high=stu.score>high?stu.score:high;
low=stu.score<low?stu.score:low;
}
}
else if (type==1) {
printf("Please input the course name(1~12Bytes):\n");
scanf("%s", course);
for (i=0; i<num; i++) {
if (strcmp(stu.course, course)==0) {
high=stu.score>high?stu.score:high;
low=stu.score<low?stu.score:low;
}
}
}
else if (type==2) {
printf("Please input the student name(1~15Bytes):\n");
scanf("%s", name);
for (i=0; i<num; i++) {
if (strcmp(stu.name, name)==0) {
printf("%-12s%-15s%d\n", stu.course, stu.name, stu.score);
/*if (stu.score>=high) {
high=stu.score;
}
if (stu.score<=low) {
low=stu.score;
}*/ high=stu.score>high?stu.score:high;
low=stu.score<low?stu.score:low;
}
}
}
else
printf("You input a WRONG number, please select from 0~2.");
if (horl==0)
return high;
else
return low;
}

/* 6 - Get the students who pass the exam.
7 - Get the students who do NOT pass the exam.
porf - 选择查询通过学生名单还是未通过学生名单,0为查询通过学生名单,
1为查询未通过学生名单 */ void passornot(int porf) {
int pnum=0;
char course[12];

printf("\nPlease input the course name:\n");
scanf("%s", course);
if (porf==0) {
printf("\nStudents who passed this exam:\n\n");
for (i=0; i<num; i++) {
if (strcmp(stu.course, course)==0 && stu.score>=60) {
printf("%s\n", stu.name);
pnum++;
}
}
printf("The total number of students is: %d\n", pnum);
}
else {
printf("\nStudents who did not pass this exam:\n\n");
for (i=0; i<num; i++) {
if (strcmp(stu.course, course)==0 && stu.score<60) {
printf("%s\n", stu.name);
pnum++;
}
}
printf("The total number of students is: %d\n", pnum);
}
}

/* 8 - Sort 采用冒泡排序算法
type - 选择排序类型,0为按课程排序,1为按学生姓名排序,2为按成绩排序
method - 排序方式,0为升序,1为降序 */ void sort(int type, int method) {
int j=0, isSwaped=1;
struct student stutemp;

/* 排序 */ if (type==0) {
for(i=0; i<num && isSwaped==1; i++) {
isSwaped=0;
for (j=0; j<num-i; j++) {
if(strcmp(stu[j].course, stu[j+1].course)>0) {
stutemp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=stutemp;
isSwaped=1; /* 如果发生交换则说明目前还没有排好序 */
}
}
}
}
else if (type==1) {
for(i=0; i<num && isSwaped==1; i++) {
isSwaped=0;
for (j=0; j<num-i; j++) {
if(strcmp(stu[j].name, stu[j+1].name)>0) {
stutemp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=stutemp;
isSwaped=1;
}
}
}
}
else {
for(i=0; i<num && isSwaped==1; i++) {
isSwaped=0;
for (j=0; j<num-i; j++) {
if(stu[j].score>stu[j+1].score) {
stutemp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=stutemp;
isSwaped=1;
}
}
}
}

/* 升序或降序输出 */ if (method==0) {
printf("\n\nCourse Student Name Score\n\n");
for (i=0; i<num; i++) {
printf("%-12s%-15s%d\n", stu.course, stu.name, stu.score);
}
}
else {
printf("\n\nCourse Student Name Score\n\n");
for (i=num-1; i>=0; i--) {
printf("%-12s%-15s%d\n", stu.course, stu.name, stu.score);
}
}
}

/* 显示菜单 */ void dispmenu() {
printf("\n");
printf("What do you want to do?(Press 0~9)\n\n");
printf("0 - Help\n");
printf("1 - Read students' information from file\n");
printf("2 - Add information to the file\n");
printf("3 - Calculate the average score\n");
printf("4 - The highest score\n");
printf("5 - The lowest score\n");
printf("6 - The students who pass the exam\n");
printf("7 - The students who do NOT pass the exam\n");
printf("8 - Sort\n");
printf("9 - Exit the program\n");
printf("\n");
}

void main() {
int action=0, type=0, method=0;
FILE *fp;

clrscr();
printf("**********************************************************\n");
printf("* *\n");
printf("* This is a students' grade records & analysis system. *\n");
printf("* *\n");
printf("**********************************************************\n");
printf("\n");

/* 载入文件内容
open score.txt file in READ ONLY mode. */ fp=fopen("D:\\score.txt", "rt");
if (fp==NULL) {
printf("\n Can NOT open this file, please check the file D:\score.txt exists.");
exit(1);
}
while (feof(fp)==0) {
fscanf(fp, "%s%s%d", stu[num].course, stu[num].name, &stu[num].score);
num++;
}
fclose(fp);

while(1) {
dispmenu();
scanf("%d", &action);
switch (action) {
case 0:
disphelp();
break;
case 1:
readrecord();
break;
case 2:
addrecord();
break;
case 3:
printf("\n\nPlease select the calculate type:\n");
printf("0 - All score; 1 - Course score; 2 - Student score\n");
scanf("%d", &type);
printf("\nThe average score is: %f\n", averscore(type));
break;
case 4:
printf("\n\nPlease select the query type:\n");
printf("0 - All score; 1 - Course score; 2 - Student score\n");
scanf("%d", &type);
printf("\nThe highest score is: %d\n", hnlscore(type, 0));
break;
case 5:
printf("\n\nPlease select the query type:\n");
printf("0 - All score; 1 - Course score; 2 - Student score\n");
scanf("%d", &type);
printf("\nThe lowest score is: %d\n", hnlscore(type, 1));
break;
case 6:
passornot(0);
break;
case 7:
passornot(1);
break;
case 8:
printf("\n\nPlease select the sort type:\n");
printf("0 - Sort by course; 1 - Sort by student name; 2 - Sort by score\n");
scanf("%d", &type);
printf("\n\nPlease select the sort method:\n");
printf("0 - Ascend; 1 - Decend\n");
scanf("%d", &method);
sort(type, method);
break;
case 9:
exit(0);
break;
default:
printf("You enter the WRONG number.Please select from 0~9");
dispmenu();
break;
}
}
}

[ 本帖最后由 非常菜 于 2007-5-9 10:43 编辑 ]
本帖最近评分记录
  • jjww1001 菊花元 +6 你太又才了 2007-5-9 15:40

TOP

LS的强人啊 ,佩服

TOP

去年的现在写过!!!!

TOP

复制内容到剪贴板
代码:
#include<stdio.h>
#include<string.h>
#define M 18 //线性表长
#define B 3 // 将线性表分成B块
#define S 6 // 每块内结点数为S
typedef char keytype; //定义关键字类型是字符型
typedef char datatype;

typedef struct //学生的结点结构
{
char num[8],name[10],mima[8]; //学生的学号,姓名 ,密码
int chin,phy,chem,eng; //学生的年龄,中文、物理、化学和英语成绩
}STUDENT;

typedef struct //线性表的结点结构
{
keytype key[8]; //关键字
STUDENT stu;
}TABLE;

typedef struct //索引表的结点结构
{
keytype key[8];
int low,high;
}INDEX;

TABLE list[M]; // 说明线性表变量
INDEX inlist[B]; // 索引表变量

void readtxt(void) // 构造线性表list及索引表inlist
{
FILE *fp;
int i,d;
char max[8];
fp=fopen("score.txt","r"); //以只读方式打开SCORE.TXT文件
for(i=0;i<M;i++) // 将SCORE.TXT中的M个数据输到线性表list中
{
fscanf(fp,"%s",list[i].stu.num);//从文件SCORE.TXT中输入第i个学生的学号
fscanf(fp,"%s",list[i].stu.mima);//从文件SCORE.TXT中输入第i个学生的密码
fscanf(fp,"%s",list[i].stu.name); //从SCORE.TXT中输入第i个学生的姓名
fscanf(fp,"%d",&list[i].stu.chin); //从SCORE.TXT中输入第i生的中文成绩
fscanf(fp,"%d",&list[i].stu.phy); //从SCORE.TXT中输入第i生的物理成绩
fscanf(fp,"%d",&list[i].stu.chem); //从SCORE.TXT中输入第i生的化学成绩
fscanf(fp,"%d",&list[i].stu.eng); //从SCORE.TXT中输入第i生的英语成绩
strcpy(list[i].key,list[i].stu.num); //将第i个学生的学号设为关键字
}
for(i=0;i<B;i++) // 构造索引表inlist,B是线性表的块数
{
inlist[i].low=i+(i*(S-1)); // 每块内结点数为S
inlist[i].high=i+(i+1)*(S-1);
}
strcpy(max,list[0].stu.num);//将第0个学生的学号复制到数组max中
d=0;
for(i=1;i<M;i++)
{
if(strcmp(max,list[i].stu.num)<0) //串max小于串list[i].stu.num
strcpy(max,list[i].stu.num); //将大的串放到max中,这是在线性表的一块中找
if((i+1)%6 == 0)
{
strcpy(inlist[d].key,max);
d++; //将索引表中第d个元素的inlist[d].key
if(i<M-1) //设为线性表中第d个块的学号的最大值
strcpy(max,list[i+1].stu.num);//将线性表中的下一块的第一个学生的学号
i++; //复制到max中,去求该块中的最大学号
}
}
fclose(fp); // 关闭SCORE.TXT文件
}

void modify(char *key,int kc,int cj) //kc是课程号,cj是成绩,key是要找的学号
{
int low1=0,high1=B-1,mid1,mid2,i,j;
int flag=0;
while(low1<=high1&&!flag)
{
mid1=(low1+high1)/2; //在索引表中求中间块位置
if(strcmp(inlist[mid1].key,key)==0)//中间块的关键字值与要找的键值相比较
{
flag=1; //找到了
mid2=mid1;
}
else if(strcmp(inlist[mid1].key,key)>0) //到前边的块内查找
high1=mid1-1;
else
low1=mid1+1; //到后边的块内查找
}
if(low1<B) //以下是在所找到的块内查找
{
i=inlist[low1].low;
j=inlist[low1].high;
}
if(mid2==1)
{
i=inlist[1].low;
j=inlist[1].high;
}

while(i<j&&strcmp(list[i].key,key))
i++; //在块内找学号相符的学生,可能找到,也可能找不到
if(strcmp(list[i].key,key)==0) //找到了,根据所给的学号去修改相应的成绩
if(kc==1)
list[i].stu.chin=cj;
else if(kc==2)
list[i].stu.phy=cj;
else if(kc==3)
list[i].stu.chem=cj;
else if(kc==4)
list[i].stu.eng=cj;
}

void writetxt(void)
{
FILE *fp; int i;
fp=fopen("score.txt","w"); // 以写方式打开SCORE.TXT文件
for(i=0;i<M;i++) // 将修改后的数据输出到SCORE.TXT文件中
{
fprintf(fp,"%s ",list[i].stu.num);
fprintf(fp,"%s ",list[i].stu.mima);
fprintf(fp,"%s",list[i].stu.name);
fprintf(fp,"%4d",list[i].stu.chin);
fprintf(fp,"%4d",list[i].stu.phy);
fprintf(fp,"%4d",list[i].stu.chem);
fprintf(fp,"%4d",list[i].stu.eng);
fprintf(fp,"\n");
}
fclose(fp); // 关闭SCORE.TXT文件
}

void printtxt(void) // 打印文件中的数据
{
int i;
printf(" 学号 姓名 语文 物理 化学 英语\n");
for(i=0;i<M;i++)
{
printf("%s ",list[i].stu.num);
printf("%s ",list[i].stu.name);
printf("%4d",list[i].stu.chin);
printf("%5d",list[i].stu.phy);
printf("%5d",list[i].stu.chem);
printf("%5d",list[i].stu.eng);
printf("\n");
}
}

void main( )
{
int t,k;
int T=0,T1=0,T2=0; // 字符数组比较时的标志
int kc,cj;
char key[8],mima[8],mm[8];
char Mima[8]="tang"; //老师查看成绩和修改成绩的密码
printf(" ****************************************\n");
printf(" \n 学生成绩操作的菜单选择系统 \n \n");
printf(" ****************************************\n");
printf(" \n你可以进行的操作如下:\n\n");
printf(" =================================\n\n");
printf(" 1. 老师查看学生的成绩\n");
printf(" 2. 学生查看自己的成绩\n");
printf(" 3. 老师修改学生的成绩\n");
printf(" 4. 退出学生成绩的操作\n");
printf(" \n =================================\n");
printf("\n 请选择你要进行的操作,选择操作号(1--4):\t");
for(; ;)
{ scanf("%d",&t);
if(t<1|| t>4)
printf("\n\t操作号输人错误,重新输入(1--4): \t");
else
break;
}

do
{switch(t)
{
case 1:
printf("\n 1. 老师查看所有学生的成绩\n");
fflush(stdin); //把缓冲区清空
printf("\n 请输入老师的密码:\t");
gets(mima);
while(strcmp(mima,Mima)!=0)
{
printf("\n 密码输入错误,请重输:\t");
gets(mima);
}
printf("\n 密码输入正确!\n");
printf("\n 学生成绩如下:\n\n");
readtxt(); // 调用输入数据函数
printtxt(); // 打印文件中的数据
break;
case 2:
printf("\n 2. 学生查看自己的成绩\n");
fflush(stdin); //把缓冲区清空
readtxt(); // 调用输入数据函数
printf("\n 请输入学生的学号:\t");
gets(key);
do
{
for(int i=0;i<M;i++)
{
if(strcmp(list[i].key,key)==0)
{
T=1;
k=i;
break;
}
}
if(T==0)
{
fflush(stdin); //把缓冲区清空
printf("\n 学生学号输入错误!\t");
printf("\n 请重输学生的学号:\t");
gets(key);
}
}while(T==0);
fflush(stdin);
printf("\n 请输入学生的密码:\t");
gets(mm);
do
{
if(strcmp(list[k].stu.mima,mm)==0)
T2=1;
else
{
printf("\n 学生密码输入错误!\t");
printf("\n 请重输学生的密码:\t");
gets(mm);
}
}while(T2==0);
if(T==1)
{
printf("\n");
printf(" 学号 姓名 语文 物理 化学 英语\n");
printf("%s",list[k].stu.num);
printf("%5s",list[k].stu.name);
printf("%5d",list[k].stu.chin);
printf("%5d",list[k].stu.phy);
printf("%5d",list[k].stu.chem);
printf("%5d",list[k].stu.eng);
printf("\n");
}
break;
case 3:
printf("\n 3. 老师修改学生的成绩\n");
fflush(stdin); //把缓冲区清空
readtxt(); // 调用输入数据函数
printf("\n 请输入老师的密码:\t");
gets(mima);
while(strcmp(mima,Mima)!=0)
{
printf("\n 密码输入错误,请重输:\t");
gets(mima);
}
printf("\n请输入欲修改成绩的学号:\t");
gets(key);
do
{
for(int i=0;i<M;i++)
{
if(strcmp(list[i].key,key)==0)
{
T1=1;
k=i;
break;
}
}
if(T1==0)
{
fflush(stdin); //把缓冲区清空
printf("\n 学生学号输入错误!\t");
printf("\n 请重输学生的学号:\t");
gets(key);
}
}while(T1==0);

if(T1==1)
{
printf("\n");
printf(" 学号 姓名 语文 物理 化学 英语\n");
printf("%s",list[k].stu.num);
printf("%5s",list[k].stu.name);
printf("%5d",list[k].stu.chin);
printf("%5d",list[k].stu.phy);
printf("%5d",list[k].stu.chem);
printf("%5d",list[k].stu.eng);
printf("\n");
}

printf("\n选择欲修改成绩的课程编号:语文(1)物理(2)化学(3)英语(4):\t");
scanf("%d",&kc);
while(kc!=1&&kc!=2&&kc!=3&&kc!=4)
{
printf("\n 学生成绩的课程编号输入错误!\n");
printf("\n 请重输学生成绩的课程编号:\t");
scanf("%d",&kc);
}
printf("\n输入该课程的修改成绩:\t");
scanf("%d",&cj);

modify(key,kc,cj); // 调用分块查找及数据修改函数
writetxt(); // 调用输出数据函数

break;
case 4:
printf("\n 4. 退出查找的操作\n\n");
printf(" 再 见 !!\t\n");
break;
}
if(t==4) break;
printf("\n 请选择你要进行的操作,选择操作号(1--4):\t");
scanf("%d",&t);

if(t!=1&&t!=2&&t!=3&&t!=4)
{
printf("\n 操作号输入错误:");
}
}while(t!=1||t!=2||t!=3||t!=4);
}
本帖最近评分记录
  • 非常菜 菊花元 +6 精品文章 2007-6-16 21:44

TOP

[fly]排序[/fly]
复制内容到剪贴板
代码:
#include <stdio.h>
#include <string.h>
char xx[5][80] ;
char yy[5][80] ;
char zz[500][80] ;
int maxline=0 ;
int maxline2=0 ; // 行记数器(记录文件行数),运行前初始化
void read_intxt(void) ; // 读in.txt文件函数说明
void read_outtxt(void) ; //读out.txt文件函数说明
void insert_sort(void); // 直接插入排序函数说明
void select_sort(void); // 直接选择排序函数说明
void write_txt(void) ; // 写文件函数说明
void print_intxt(void) ;
void print_intxt(void) ;

void insert_sort(void) // 直接插入排序算法
{
int n,i,j,len;
char k;
for(n=0;n<maxline;n++) // 对读出数据按行执行如下操作
{
len=strlen(xx[n]); // 确定各行长度
for(i=0;i<len;i++) // 各行直接插入排序
{
k=xx[n][i];
j=i-1; // K是哨兵
while(k<xx[n][j]) // 由后向前查找插入位置
{
if(j<0) break;
xx[n][j+1]=xx[n][j];
j--;
}
xx[n][j+1]=k; // 将当前最小值(哨兵)插入适当位置
}
}
}

void select_sort(void) // 直接选择排序算法
{
int m,n,len;
int i,j,k=0;
char str,key; //key记下较小的字母
for(m=0;m<maxline;m++) // 对读出数据按行执行如下操作
{
len=strlen(xx[m]); // 确定各行长度
for(i=0;i<len;i++) //第i行进行选择排序
{
key=xx[m][i];
for(j=i+1;j<len;j++) //在当前无序区xx[i..len]选最小的字符
{
if(xx[m][j]<key)
{
key=xx[m][j];
n=j;
}
}

if(key!=xx[m][i])
{
str=xx[m][n];
xx[m][n]=xx[m][i];
xx[m][i]=str;
}
}
}
}

void write_inouttxt(void) // 将排序后的数据写入文件OUT.TXT
{
FILE *fp;
int i;
fp=fopen("inout.txt","w") ; // 以写方式打开inout.TXT文件
for(i=0; i<maxline;i++)
fprintf(fp,"%s\n",xx[i]) ; // 将排序后的数据按行写入OUT.TXT
fclose(fp); // 关闭OUT.TXT文件
}

void read_intxt(void) // 将文件IN.TXT中数据读入二维字符数组
{
FILE *fp;
int i=0;
char *p;
fp=fopen("in.txt","r"); // 用只读方式打开IN.TXT文件
while(fgets(xx[i],80,fp)!=NULL) // 读入一行
{
p = strchr(xx[i],'\n'); // 将各行中的字符'\n'代之以NULL
if(p)
xx[i][p-xx[i]] = 0;
i++;
if(i==5)
break;
}
maxline = i ; // 记录文件总行数

write_inouttxt();
fclose(fp); // 关闭IN.TXT文件
}

void read_outtxt(void) // 将文件IN.TXT中数据读入二维字符数组
{
FILE *fp;
int i=0;
char *p;
fp=fopen("out.txt","r"); // 用只读方式打开out.TXT文件
while(fgets(yy[i],80,fp)!=NULL) // 读入一行
{
p = strchr(yy[i],'\n'); // 将各行中的字符'\n'代之以NULL
if(p)
yy[i][p-yy[i]] = 0;
i++;
if(i==5)
break;
}
maxline2 = i ; // 记录文件总行数
fclose(fp); // 关闭IN.TXT文件
}

void write_txt(void) // 将排序后的数据写入文件OUT.TXT
{
FILE *fp;
int i;
fp=fopen("out.txt","w") ; // 以写方式打开OUT.TXT文件
for(i=0; i<maxline;i++)
fprintf(fp,"%s\n",xx[i]) ; // 将排序后的数据按行写入OUT.TXT
fclose(fp); // 关闭OUT.TXT文件
}

void print_intxt(void) // 查看排序前的文件内容
{
int i;
printf("\n");
for(i=0;i<maxline;i++)
{
printf("%s\n",xx[i]);
}
}

void print_outtxt(void) // 查看排序后的文件内容
{
int i;
printf("\n");
for(i=0;i<maxline2;i++)
{
printf("%s\n",yy[i]);
}
}

void print_inouttxt(void) // 查看排序后的文件内容
{
int i;
printf("\n");
for(i=0;i<maxline;i++)
{
printf("%s\n",zz[i]);
}
}

void add(void)
{
int k,max;
char str[80];
FILE *fp;
int i=0;
char *p;
fp=fopen("in.txt","r"); // 用只读方式打开IN.TXT文件
while(fgets(xx[i],80,fp)!=NULL) // 读入一行
{
p = strchr(xx[i],'\n'); // 将各行中的字符'\n'代之以NULL
if(p)
xx[i][p-xx[i]] = 0;
i++;
}
maxline = i ; // 记录文件总行数 ,i=6
max = maxline ; // 临时记录文件总行数
printf("\n请输入你要增添字符串到哪一行(从第0行开始):\t");
scanf("%d",&k);
while(k<0||k>max)
{
printf("\n增添的位置错误!");
printf("\n请输入你要增加到哪一行(从第0行开始):\t");
scanf("%d",&k);
}
while(k<=max)
{
xx[max] = xx[max-1] ;
max--;
}
fflush(stdin); //把缓冲区清空
printf("\n输入你要增加的字符串:\t");
gets(str);
strcpy(xx[max+1],str);
maxline=maxline+1;
fclose(fp); // 关闭IN.TXT文件

fp=fopen("in.txt","w"); // 用只写方式打开IN.TXT文件
for(int i=0; i<maxline;i++)
fprintf(fp,"%s\n",xx[i]) ; // 将增加了字符串后的数据按行重新写入in.TXT
fclose(fp);
}

void sub(void)
{
int k,max;
FILE *fp;
int i=0;
char *p;
fp=fopen("in.txt","r"); // 用只读方式打开IN.TXT文件
while(fgets(xx[i],80,fp)!=NULL) // 读入一行
{
p = strchr(xx[i],'\n'); // 将各行中的字符'\n'代之以NULL
if(p)
xx[i][p-xx[i]] = 0;
i++;
}
maxline = i ; // 记录文件总行数
max = maxline ; // max临时记录文件总行数
printf("\n请输入你要删除的行数(从第0行开始):\t");
scanf("%d",&k);
while(k<0||k>max-1)
{
printf("\n删除的位置错误!");
printf("\n请输入你要删除的位置(从第0行开始):\t");
scanf("%d",&k);
}
while(k<maxline)
{
xx[k] = xx[k+1] ;
k++;
}

maxline=maxline-1;
fclose(fp); // 关闭IN.TXT文件

fp=fopen("in.txt","w"); // 用只写方式打开IN.TXT文件
for(int i=0; i<maxline;i++)
fprintf(fp,"%s\n",xx[i]) ; // 将增加了字符串后的数据按行重新写入in.TXT
fclose(fp);
}


void main( )
{
int k;
int h;
int t;
printf(" **************************************\n");
printf(" \n 排序操作的菜单系统 \n \n");
printf(" **************************************\n");
printf(" \n你可以进行的操作如下:\n\n");
printf(" =======================================\n\n");
printf(" 1. 查看排序前的文件内容(in.txt)\n");
printf(" 2. 用直接插入排序算法进行排序\n");
printf(" 3. 用直接选择排序算法进行排序\n");
printf(" 4. 查看排序后的文件内容(out.txt)\n");
printf(" 5. 增加字符串到(in.txt)(从第0行开始)\n");
printf(" 6. 删除(in.txt)中的某行字符串(从第0行开始)\n");
printf(" 7. 退出排序的操作\n");
printf(" \n ========================================\n");
printf("\n 请选择你要进行的操作,选择操作号(1--7):\t");
for(; ;)
{ scanf("%d",&t);
if(t<1|| t>7)
printf("\n\t操作号输人错误,重新输入号(1--7): \t");
else
break;
}

do
{switch(t)
{
case 1:
printf("\n 1. 查看排序前的文件内容(in.txt) \n");
fflush(stdin); //把缓冲区清空
read_intxt(); // 调用输入数据函数
print_intxt(); // 查看排序前的文件内容
break;
case 2:
printf("\n 2. 用直接插入排序算法进行排序 \n");
read_intxt(); // 调用输入数据函数
insert_sort(); // 调用直接插入排序函数
write_txt(); // 调用输出数据函数
break;
case 3:
printf("\n 3. 用直接选择排序算法进行排序 \n");
read_intxt(); // 调用输入数据函数
select_sort(); // 调用直接选择排序函数
write_txt(); // 调用输出数据函数
break;
case 4:
printf("\n 4. 查看排序后的文件内容(out.txt) \n");
read_outtxt(); // 调用输入数据函数
print_outtxt(); // 查看排序后的文件内容
break;
case 5:
printf("\n 5. 增加字符串到(in.txt)(从第0行开始)\n");
printf("\n 请输入增加的行数:\t");
scanf("%d",&h);
if(h>0)
{
for(k=1;k<=h;k++)
add();
}
else
printf("\n输入有误!\n");
break;
case 6:
printf("\n 6. 删除(in.txt)中的某行字符串(从第0行开始)\n");
printf("\n 请输入删除的行数:\t");
scanf("%d",&h);
if(h>0)
{
for(k=1;k<=h;k++)
sub();
}
else
printf("\n输入有误!\n");
break;
case 7:
printf("\n 7. 退出查找的操作\n\n");
printf(" 再 见 !!\t\n");
exit(0);
default:
printf("\n 操作号输入错误,请重新输入(1--7):");
break;
}
printf("\n 请选择你要进行的操作,选择操作号(1--7):\t");
scanf("%d",&t);
fflush(stdin); //把缓冲区清空
}while(1);
}

TOP

学习中!

TOP