急求代码!拜托

rongrong1130 2005-05-17 07:12:00
要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。
程序中使用的主要设计结构如下:
主文件目录和用户文件目录( MFD、UFD) 打开文件目录( AFD)(即运行文件目录)
M D F
用户名
文件目录指针
用户名
文件目录指针
U F D
文件名
保护码
文件长度
文件名
· ··
A F D
打开文件名
打开保护码
读写指针



如增加 2~3个文件操作命令,并加以实现。(如移动读写指针,改变文件属性,更换文件名,改变文件保护级别)。


...全文
308 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cppprogramlover 2005-05-24
  • 打赏
  • 举报
回复
这么长
snailcl 2005-05-24
  • 打赏
  • 举报
回复
太长了
kikikind 2005-05-23
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<conio.h>

#define MAXSIZE 100
#define ADDSIZE 50
#define PT elem+l->length
#define N 4
typedef struct term{/*班级和学期的结构体*/
char class1[10];
char term1[10];
}term;

typedef struct student{/*学生成绩信息的结构体*/
term st;/*班级和学期结构体放于此结构体中*/
char num[10];
char name[12];
float course[4];
float total;
float average;
int bit;
}lnode,*stu;

typedef struct{
lnode *elem;/*指向上个结构体的指针*/
int size;/*最大能放lnode结构体成员的个数*/
int length;/*当前长度*/
}sqack,*sq;
sqack *l;


void init(void)/*动态分配存储空间*/
{
l->elem=(stu)malloc(MAXSIZE*sizeof(lnode));
l->length =0;
l->size=MAXSIZE;
}


void input(void)/*输入学生的信息*/
{
lnode *newbase,*p;
char cla[10],ter[10],ch;
int n,i;

if(l->length>=l->size){
newbase=(stu)realloc(l->elem,(l->size +ADDSIZE)*sizeof(lnode));/*追加存储空间*/
l->elem =newbase;
l->size +=ADDSIZE;
}

p=l->elem;
do
{
printf("输入班级和学期(学期用这种格式,如2005年上学期 2005 1,2005年下学期 2005 2;先输入班级,回车后再输入学期)\n");
gets(cla);
gets(ter);
printf("要输入多少个名单?");
scanf("%d",&n);
printf("输入学生的成绩\n学号\t姓名\t科目1\t科目2\t科目3\t科目4\n");

for(i=0;i<n;i++)
{
scanf("%s%s%d%d%d%d",p->num ,p->name,p->course[0],p->course[1],p->course[2],p->course[3]);
strcpy(p->st.class1,cla);
strcpy(p->st.term1,ter);
++l->length ;
}
printf("要继续吗?(y/n)");
ch=getchar();}while(ch=='Y'||ch=='y');
}

void change()/*修改学生的信息*/
{
lnode *p;
lnode e;
int flag=1,i;

char s1[10],num1[10];
printf("输入学期和学号(输入学期以后按回车再输入学号):\n");
gets(s1);
gets(num1);
p=l->elem ;

while(p<=(l->elem+l->length ) && flag==1)/*查找要修改的学生的信息*/
{
if(strcmp(p->num,num1)==0&&strcmp(p->st.term1,s1)==0)
flag=0;/*找到了*/
p++;
}

p--;
if(flag==1) printf("找不到此学号!\n");

printf("%s %s",p->num,p->name);

for(i=0;i<N;i++)
printf("%d ",p->course[i]);

printf("\n");
printf("输入修改信息\n");

scanf("%s%s%s%s",e.st.class1,e.st.term1,&e.num,e.name);

for(i=0;i<N;i++)
scanf("%d",&e.course[i]);
*p=e;
}

void same(char *t1,char *t2,lnode *t,int *k) /*把学期和班级相同的学生信息放在结构体数组tt中*/
{
int i=0;
lnode *p,*q;
q=t;
p=l->elem ;

while(p<=l->elem+l->length )
{
if(strcmp(p->st.term1,t1)==0&&strcmp(p->st.class1 ,t2)==0)
{
*q=*p;q++;
i++;
}
p++;
}
*k=i;
}

void sort(lnode *p,int *k)/*按学生成绩从高到低排序函数*/
{
int i;
lnode *q,temp;

for(q=p;q<p+ *k;q++)
{
q->total =0;

for(i=0;i<N;i++)
q->total =q->total +q->course [i];

q->average =q->total /N;
}

for(i=0;i<*k-1;i++)
for(q=p;q<p+*k-1-i;q++)

if(q->total<(q+1)->total)
{
temp=*q;*q=*(q+1);*(q+1)=temp;
}
}

void print(lnode *q,int *k)/*输出学生的成绩*/
{

lnode *p;
p=q;

for(p=q;p<q+*k;p++)
{
printf("%s %s",p->num,p->name);

for(int i=0;i<N;i++)
printf("%d ",p->course[i]);

printf("%d %f",p->total,p->average);
printf("\n");
}
}

void stat()/*统计学生的成绩*/
{
lnode tt[50];
char ter[10],clas[10];
int i,k;

printf("请输入学期和班级(输入学期后按回车再输入班级):\n");

for(i=0;ter[i]!='\n';i++)
ter[i]=getchar();
for(i=0;clas[i]!='\n';i++)
clas[i]=getchar();

same(ter,clas,tt,&k);/*把学期和班级相同的学生信息放在结构体数组tt中*/
sort(tt,&k);/*按学生成绩从高到低排序函数*/
print(tt,&k);/*输出学生的成绩*/
}

void search1()/*按学号查*/
{
lnode *p;
char ter1[10];
int i,flag=1;

p=l->elem;
printf("输入学号:");
gets(ter1);

for(p=l->elem;p<l->PT;p++)
{
if(strcmp(p->num,ter1)==0)
{
flag=0;
printf("%s %s ",p->st.term1,p->st.class1);
printf("%s %s ",p->num,p->name);

for(i=0;i<N;i++)
printf("%d ",p->course[i]);

printf("%d %3.1f",p->total,p->average);
printf("\n");
}
}

if(flag) printf("没有找到!");

}


void search2()/*按姓名查*/
{
lnode *p;
char ter1[10];
int i,flag=1;
p=l->elem;

printf("输入姓名:");
gets(ter1);

for(p=l->elem;p<l->PT;p++)
{
if(strcmp(p->name,ter1)==0)
{
flag=0;
printf("%s %s ",p->st.term1,p->st.class1);
printf("%s %s",p->num,p->name);

for(i=0;i<N;i++)
printf("%d ",p->course[i]);

printf("%d %f",p->total,p->average);
printf("\n");
}
}

if(flag) printf("没有找到!") ;
}

void search()/*查找学生的成绩*/
{
char ch;
do
{
printf("1 按学号查询\n2按姓名查询\n");
ch=getchar();

switch(ch)
{
case '1':
search1();
break;
case '2':
search2();
break;

default:
printf("错误!\n");
}

printf("要继续查找吗?(y/n)");
ch=getchar();
} while(ch=='y' || ch=='Y');
}

void fail()/*查找不及格及学生名单*/
{
int i;
lnode *p;

for(p=l->elem;p<l-> PT;p++)
{
for(i=0;i<N;i++)
if(p->course[i]<60)
{
printf("%s %s ",p->st.class1,p->st.term1);

for(i=0;i<N;i++)
printf("%d ",p->course[i]);

printf("%d %f ",p->total,p->average);
printf("\n");}}
}


void output()/*按班级输出学生的成绩单*/
{
lnode tt[50];
int k;
char clas[10],ter1[10];

printf("输入要查询的班级和学期(输入班级后按回车输入学期):\n");
gets(clas);
gets(ter1);
same(ter1,clas,tt,&k);/*把学期和班级相同的学生信息放在结构体数组tt中*/
print(tt,&k);/*输出学生的成绩*/
}


int main()
{
char ch;
do
{
printf("请选择:\n");
printf("1 对学生成绩的录入\n2 对学生成绩的修改\n3 统计学生成绩\n4 查询学生成绩\n5查找不及格科目及学生名单\n6 按班级输出学生成绩单\n ");
ch=getchar();

switch(ch)
{
case '1': input();break;
case '2':change();break;
case '3':stat();break;
case '4':search();break;
case '5':fail();break;
case '6':output();break;
default:printf("错误!\n");
}

printf("要继续吗?(y/n)");
ch=getchar();
}while(ch=='y'||ch=='Y');

return 0;
getch();
}
-------------------------------------
以上是我帮你消除的所有编译错误和程序风格后的代码~~~~~至于程序设计的逻程错误就要楼主你自己慢慢想想咯,总不能都帮你做了吧~!(不过一开始代码实在太乱,而且还有很低级的错误,比如比较时用了'=',调用函数实现写在调用之后,函数名有数字开头等等,这些在C中都是非法的~~~~)
不过基本上基础的东西都用上了,也不往这次设计的用意!!
好好练习吧~~~~还要记得帮我加分哦呵~~^_^!
有什么不明白再发上来讨论吧~~~
最后:注意程序的风格呀,不过什么也写成一团,自己也看得辛苦!!
kikikind 2005-05-23
  • 打赏
  • 举报
回复
非常多的逻辑,人为错误哦~~~~~~~~很多都是输入错误~~`
楼主怎么搞的`!!!
而且代码风格~-_-!;
难道是我复制出了问题~>_<!
rongrong1130 2005-05-23
  • 打赏
  • 举报
回复
有没有搞错是我在提问文件管理啊?
我很急拜托不帮忙也别捣蛋好不!!!
zhousqy 2005-05-18
  • 打赏
  • 举报
回复
楼主,首先,现在用c来做MIS系统的很少了,其次,你一口气把整个代码都贴上来,然后就说一句“不能编译”,鬼才有功夫慢慢看你的代码呢,在论坛上提问一般都是跟踪堆栈,找出出错的地方,实在是技术难题才发贴,这样一问就问到点子上,才会有感兴趣的来细细研究解决。
----------
哪个是楼主啊?
ganbaba 2005-05-18
  • 打赏
  • 举报
回复
晕啊,楼主,看得头晕
qingyuan18 2005-05-18
  • 打赏
  • 举报
回复
楼主,首先,现在用c来做MIS系统的很少了,其次,你一口气把整个代码都贴上来,然后就说一句“不能编译”,鬼才有功夫慢慢看你的代码呢,在论坛上提问一般都是跟踪堆栈,找出出错的地方,实在是技术难题才发贴,这样一问就问到点子上,才会有感兴趣的来细细研究解决。
lanshigang1984 2005-05-18
  • 打赏
  • 举报
回复
社区怎么不能提问啊?
我们正在做C语言课程设计,我忙一个星期了,代码是写出来了
但是老是不能编译成功,我很急啊,明天就要交上去了啊,
请高手帮我看看,小弟在此谢过了!
题目是这样子的:
做一个学生成绩管理系统,要求如下:
1.主要功能:
(1) 能按学期、按班级完成对学生成绩的录入、修改 (1-3用函数实现)
(2) 能按班级统计学生的成绩 的总分及均分,并能根据学生的平均成绩进行排序 (TOTAL、AVERAGE、)
(3) 能查询学生成绩,不及格科目及学生名单(有相应的提示:请输入学号)。。。。。。)(4) 能按班级输出学生的成绩单
2.要求: 界面友好,易于操作

以下是我编的程序:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<conio.h>

#define MAXSIZE 100
#define ADDSIZE 50
#define PT elem+l->length
#define N 4
typedef struct term{/*班级和学期的结构体*/
char class1[10];
char term1[10];
}term;
typedef struct student{/*学生成绩信息的结构体*/
term st;/*班级和学期结构体放于此结构体中*/
char num[10];
char name[12];
float course[4];
int total;
int average;
int bit;
}lnode,*stu;

typedef struct{
lnode *elem;/*指向上个结构体的指针*/
int size;/*最大能放lnode结构体成员的个数*/
int length;/*当前长度*/
}sqack,*sq;
sqack *l;
void init(void)/*动态分配存储空间*/
{l->elem=(stu)malloc(MAXSIZE*sizeof(lnode));
l->length =0;
l->size=MAXSIZE;
}


int input(void)/*输入学生的信息*/
{lnode *newbase,*p;
char cla[10],ter[10],ch;
int n,i;
if(l->length>=l->size){
newbase=(stu)realloc(l->elem,(l->size +ADDSIZE)*sizeof(lnode));/*追加存储空间*/
l->elem =newbase;
l->size +=ADDSIZE;
}
p=l->elem;
do
{printf("输入班级和学期(学期用这种格式,如2005年上学期 2005 1,2005年下学期 2005 2;先输入班级,回车后再输入学期)\n");
gets(cla);
gets(ter);
printf("要输入多少个名单?");
scanf("%d",&n);
printf("输入学生的成绩\n学号\t姓名\t科目1\t科目2\t科目3\t科目4\n");
for(i=0;i<n;i++)
{scanf("%s%s%d%d%d%d",p->num ,p->name,p->course[0],p->course[1],p->course[2],p->course[3]);
strcpy(p->st.class1,cla);
strcpy(p->st.term1,ter);
++l->length ;}
printf("要继续吗?(y/n)");
ch=getchar();}while(ch=='Y'||ch=='y');
}
int change()/*修改学生的信息*/
{lnode *p;
lnode e;
int flag=1,i;
char s1[10],num1[10];
printf("输入学期和学号(输入学期以后按回车再输入学号):\n");
gets(s1);
gets(num1);
p=l->elem ;
while(p<=(l->elem+l->length ) && flag==1)/*查找要修改的学生的信息*/
{if(strcmp(p->num,num1)==0&&strcmp(p->st.term1,s1)==0);
flag=0;/*找到了*/
p++;}
p--;
if(flag==1) printf("找不到此学号!\n");

printf("%s %s",p->num,p->name);
for(i=0;i<N;i++)
printf("%d ",p->course[i]);
printf("\n");
printf("输入修改信息\n");
scanf("%s%s%s%s",e.st.class1,e.st.term1,&e.num,e.name);
for(i=0;i<N;i++)
scanf("%d",&e.course[i]);
*p=e;
}
void stat()/*统计学生的成绩*/
{lnode tt[50];
char ter[10],clas[10];
int i,k;
printf("请输入学期和班级(输入学期后按回车再输入班级):\n");
for(i=0;ter[i]!='\n';i++)
ter[i]=getchar();
for(i=0;clas[i]!='\n';i++)
clas[i]=getchar();
same(ter,clas,tt,&k);/*把学期和班级相同的学生信息放在结构体数组tt中*/
sort(tt,&k);/*按学生成绩从高到低排序函数*/
print(tt,&k);/*输出学生的成绩*/
}

void same(char *t1,char *t2,lnode *t,int *k) /*把学期和班级相同的学生信息放在结构体数组tt中*/
{int i=0;
lnode *p,*q;
q=t;
p=l->elem ;
while(p<=l->elem+l->length )
{if(strcmp(p->st.term1,t1)==0&&strcmp(p->st.class1 ,t2)==0)
{*q=*p;q++;
i++;}
p++;}
*k=i;
}
int sort(lnode *p,int *k)/*按学生成绩从高到低排序函数*/
{int i;
lnode *q,temp;
for(q=p;q<p+ *k;q++)
{q->total =0;
for(i=0;i<N;i++)
q->total =q->total +q->course [i];
q->average =q->total /N;
}
for(i=0;i<*k-1;i++)
for(q=p;q<p+*k-1-i;q++)
if(q->total<(q+1)->total){temp=*q;*q=*(q+1);*(q+1)=temp;}
}
void print(londe *q,int *k)/*输出学生的成绩*/
{int n;
lnode *p;
p=q;
for(p=q;p<q+*k;p++)
{printf("%s %s",p->num,p->name);
for(i=0;i<N;i++)
printf("%d ",p->course[i]);
printf("%d %f",p->total,p->average);
printf("\n");}
}
void search()/*查找学生的成绩*/
{char ch;
do
{printf("1 按学号查询\n2按姓名查询\n");
ch=getchar();
switch(ch)
{case '1': 1search();break;
case '2': 2search();break;
default:printf("错误!\n");
}printf("要继续查找吗?(y/n)");
ch=getchar() } while(ch=='y'&&ch=='Y');
}
void 1search()/*按学号查*/
{lnode *p;
char ter1[10];
int i,flag=1;
p=l->elem;
printf("输入学号:");
gets(ter1);
for(p=l->elem;p<l->PT;p++)
{if(strcmp(p->num,ter1)==0)
{flag=0;
printf("%s %s ",p->st.term1,p->st.class1);
printf("%s %s ",p->num,p->name);
for(i=0;i<N;i++)
printf("%d ",p->course[i]);
printf("%d %3.1f",p->total,p->average);
printf("\n");}}
if(flag) printf("没有找到!");
}
void 2search()/*按姓名查*/
{lnode *p;
char ter1[10];
int i,flag=1;
p=l->elem;

printf("输入姓名:");
gets(ter1);
for(p=l->elem;p<l->PT;p++)
{if(strcmp(p->name,ter1)==0)
{flag=0;
printf("%s %s ",p->st.term1,p->st.class1);
printf("%s %s",p->num,p->name);
for(i=0;i<N;i++)
printf("%d ",p->course[i]);
printf("%d %f",p->total,p->average);
printf("\n");}
}
if(flag) printf("没有找到!") ;
}
void fail()/*查找不及格及学生名单*/
{int i;
lnode *p;
for(p=l->elem;p<l-> PT;p++)
{ for(i=0;i<N;i++)
if(p->course[i]<60)
{printf("%s %s ",p->st.class1,p->st.term1);
for(i=0;i<N;i++)
printf("%d ",p->course[i]);
printf("%d %f ",p->total,p->average);
printf("\n");}}
}
void output()/*按班级输出学生的成绩单*/
{lnode tt[50];
int k;
char clas[10],ter1[10];
printf("输入要查询的班级和学期(输入班级后按回车输入学期):\n");
gets(clas);
gets(ter1);
same(ter1,clas,tt,&k);/*/*把学期和班级相同的学生信息放在结构体数组tt中*/*/
print(tt,&k);/*输出学生的成绩*/
}


int main()
{char ch;
do
{printf("请选择:\n");
printf("1 对学生成绩的录入\n2 对学生成绩的修改\n3 统计学生成绩\n4 查询学生成绩\n5查找不及格科目及学生名单\n6 按班级输出学生成绩单\n ");
ch=getchar();
switch(ch)
{case '1': input();break;
case '2':change();break;
case '3':stat();break;
case '4':search();break;
case '5':fail();break;
case '6':output();break;
default:printf("错误!\n");
}
printf("要继续吗?(y/n)");
ch=getchar();
}while(ch='y'||ch='Y');
return;
getch();
}






























mostideal 2005-05-18
  • 打赏
  • 举报
回复
帮你顶了。。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧