#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 10
int M=0
struct student
{
char num[13]
char name[20]
char sex
char address[30]
intage
}
typedef struct LB
{
struct student XINXI
struct LB *next
}LB_1,*LB_2
void CAIDANG()
{
printf(" \t \t \t (欢迎使用本班级档案管理系统)\t\t\t\t\n")
printf("★*★*★*★*★*★*★*★*★*★ 欢迎进入我们的系统 ★*★*★*★*★*★*★*★*★*★\n\n")
printf("1.录入学生资料\t\t\t\t\t4.查询学生信息\n\n")
printf("2.修改学生信息\t\t\t\t\t5.删除学生信息\n\n")
printf("3.保存学生信息\t\t\t\t\t0.退出档案系统\n\n")
printf("\n")
printf("★*★*★*★*★*★*★*★*★*★ 欢迎进入本系统 ★*★*★*★*★*★*★*★*★*★\n")
}
/*文本颜色*/
void color()
{
textbackground(8)
textcolor(9)
clrscr()
}
void Wrong()
{
printf("\n对不起您的输入错误!\n")
}
void SORRY()
{
printf("\n对不起该同学现没有任何信息!\n")
}
void printe(LB_1 *p)/* 本函数用于输出英文*/
{
printf(" %-2s %s\t %s\t%s\t %d\t \n",p->XINXI.num,p->XINXI.name,p->XINXI.sex,p->XINXI.address,p->XINXI.age)
}
/* 该函数用于定位链表中符合要求的接点,并返回该指针*/
LB_1 *Locate(LB_2 l,char findmess[],char nameornum[])
{
LB_1 *r
if(strcmp(nameornum,"num")==0) /* 按学号查询*/
{
r=l->next
while(r!=NULL)
{
if(strcmp(r->XINXI.num,findmess)==0)
return r
r=r->next
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查询*/
{
r=l->next
while(r!=NULL)
{
if(strcmp(r->XINXI.name,findmess)==0)
return r
r=r->next
}
} return 0
}
/*以下是增加学生信息的函数*/
void TIANJIA(LB_2 l)
{
LB_1 *p,*r,*s
char num[13]
r=ls=l->next
while(r->next!=NULL) /*些处循环一直到最后*/
r=r->next
while(1)
{
printf(" 请输入添加的学生学号(输入'0'返回上一级菜单:)")
scanf("%s",num)
if(strcmp(num,"0")==0)
break
while(s)
{
if(strcmp(s->XINXI.num,num)==0)
{
printf("(必看提示):学号为'%s'的学生已有信息,若要修改请你输入'2 修改'!\n",num)
printe(s)
printf("\n")
return
}
s=s->next
} p=(LB_1 *)malloc(sizeof(LB_1))
strcpy(p->XINXI.num,num)
printf(" 请你输入学号:")
scanf("%s",p->XINXI.num)
getchar()
printf(" 请你输入姓名:")
scanf("%s",p->XINXI.name)
getchar()
printf(" 请你输入性别:")
scanf("%s",p->XINXI.sex)
getchar()
printf(" 请你输入地址:")
scanf("%s",p->XINXI.address)
getchar()
printf(" 请你输入年龄:")
scanf("%d",&p->XINXI.age)
getchar()
/* 下面是把指针变量转到链表的下一个结点中以便循环的时候使用*/
p->next=NULL
r->next=p
r=pM=1
}
}
/*以下是删除学生信息的函数*/
void SHANCHU(LB_2 l)
{
int sel
LB_1 *p,*r
char findmess[20]
if(!l->next)
{
printf("\n******(必看提示):对不起,现文件中没有信息:所以您不能查询!\n")
return
}
printf("\n <必看提示><以学号删除请输入1\n><以姓名删除请输入2\n>PLEASE:")
scanf("%d",&sel)
if(sel==1)
{
printf("请输入要删除的学生的学号PLEASE:")
scanf("%s",findmess)
p=Locate(l,findmess,"num")
if(p)
{ r=l
while(r->next!=p)
r=r->next
r->next=p->next
free(p)
printf("\n*******(必看提示):该学生的信息已完全删除成功!\n")
M=1
}
else
SORRY()
}
else if(sel==2)
{
printf("请输入要删除的学生的姓名PLEASE:")
scanf("%s",findmess)
p=Locate(l,findmess,"name")
if(p)
{ r=l
while(r->next!=p)
r=r->next
r->next=p->next
free(p)
printf("\n******(必看提示):该学生信息已成功删除!\n")
M=1
}
else
SORRY()
}
else
Wrong()
}
/*以下是查询学生信息*/
void CHAXIONG(LB_2 l)
{ int sel
char findmess[20]
LB_1 *p
if(!l->next)
{ printf("\n******(必看提示):对不起,现文件中没有信息:所以您不能查询!\n")
return
}
printf("\n以学号查询请输入1:\n以姓名查询请输入2:\n以性别查询请输入3:\n以性别查询请输入4:\nPLEASE:")
scanf("%d",&sel)
if(sel==1)/*输入学号查询*/
{
printf("请你输入要查找的学号:")
scanf("%s",findmess)
p=Locate(l,findmess,"num")
if(p)
{ printf("\t\t\t\t查找结果\n")
printf(" 学号:%s\n姓名:%s\n性别:%s\n地址:%s\n年龄:%d\n",p->XINXI.num,p->XINXI.name,p->XINXI.sex,p->XINXI.address,p->XINXI.age)
}
else
SORRY()
}
if(sel==2) /* 输入姓名查询*/
{
printf("请你输入要查找的姓名:")
scanf("%s",findmess)
p=Locate(l,findmess,"name")
if(p)
{ printf("\t\t\t\t查找结果\n")
printf(" 学号:%s\n姓名:%s\n性别:%s\n地址:%s\n年龄:%d\n",p->XINXI.num,p->XINXI.name,p->XINXI.sex,p->XINXI.address,p->XINXI.age)
}
else
SORRY()
}
else
Wrong()
}
/*以下是修改学生信息的函数*/
void XIUGEI(LB_2 l)
{
LB_1 *p
long int i,j
char findmess[20]
if(!l->next)
{ printf("\n(必看提示):对不起,现文件中没有信息:所以您不能查询!\n")
return
}
for(i=1i<=2i++)
{
printf("\n\n\n\n\n")
printf("请输入密码:")
scanf("%s",&j)
if(j==2007)break
else
{if(j!=2007)
return(CAIDANG())
}
}
printf("请你输入要修改的学生学号:")
scanf("%s",findmess)
p=Locate(l,findmess,"num")
if(p)
{ printf("请你输入新学号(原来是%s):",p->XINXI.num)
scanf("%s",p->XINXI.num)
printf("请你输入新姓名(原来是%s):",p->XINXI.name)
scanf("%s",p->XINXI.name)
printf("请你输入新性别(原来是%s):",p->XINXI.sex)
scanf("%s",p->XINXI.sex)
printf("请你输入新地址(原来是%s):",p->XINXI.address)
scanf("%s",p->XINXI.address)
printf("请你输入新年龄(原来是%d):",p->XINXI.age)
scanf("%s",p->XINXI.age)
getchar()
M=1
}
else
SORRY()
}
/*保存在文件中*/
void BAOCONG(LB_2 l)
{
FILE* fp
LB_1 *p
int flag=1,count=0
fp=fopen("c:\\lyg","wr")
if(fp==NULL)
{
printf("\n=====>提示:重新打开文件时发生错误!\n")
exit(1)
}
p=l->next
while(p)
{
if(fwrite(p,sizeof(LB_1),1,fp)==1)
{ p=p->next
count++
}
else
{ flag=0
break
}
}
if(flag)
{ printf("\n 提示;正在保存文件 共保存了%d条信息\n",count)M=0
}
fclose(fp)
}
/*以下是主函数*/
void main()
{
LB_2 l/* 连表*/
FILE *fp/* 文件指针*/
int sellong i,j,d
char ch
char jian
int count=0
LB_1 *p,*r
color()
clrscr()
l=(LB_1*)malloc(sizeof(LB_1))
l->next=NULL
r=l
fp=fopen("C:\\lyg","rb")
if(fp==NULL)
{
printf("\t\t\t\t\n\n")
printf("\n")
printf(" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n"
" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n"
" Welcome to come to our system!!! \n"
" You can only inquire your own messages! If you want to see about other \n"
" students' messages,you need first to send inquirment to them,asking for \n"
" agreement,then you can visit his/her messages! \n"
" Have a good time! now you can come in!!! \n"
" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n"
" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n"
" 注意:系统启动码为 : ILOVEMYSCHOOLVERYMUCH !!!\n"
" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n"
" *_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*\n")
printf("欢迎使用,本系统中现没有任何记录,您要先创建文件请按以下 *** 做进行PLEASE:\n")
printf("\n提示:文件还不存在,是否创建?(y/n)请做选择--\n")
printf("\n")
scanf("%c",&jian)
if(jian=='y'||jian=='Y')
{fp=fopen("C:\\lyg","wb")
clrscr()
}
{for(i=1i<=2i++)
{
printf("\n\n\n\n\n")
printf("请输入密码:")
scanf("%ld",&j)
if(j==2007)break
else
{if(j!=2007)return
}
}
}
exit(0)clrscr()
}
while(!feof(fp))
{
p=(LB_1*)malloc(sizeof(LB_1))
if(fread(p,sizeof(LB_1),1,fp)) /* 将文件的内容放入链表中*/
{
p->next=NULL
r->next=p
r=p/*把该结点放入链表中*/
count++
}
}
fclose(fp)/* 关闭文件*/
while(1)
{
CAIDANG()
printf("请你选择 *** 作:")
scanf("%d",&sel)
clrscr()
printf("\n\n\n")
if(sel==0)
{
if(M==1)
{ getchar()
printf("\n(必看提示):链表中的信息已经改动,如果确认把改动保存在文件中请做选择(y/n)?\n")
scanf("%c",&ch)
if(ch=='y'||ch=='Y')
BAOCONG(l)
}
breakclrscr()
}
switch(sel)
{
case 1: TIANJIA(l)break
case 4: CHAXIONG(l)break
case 3: BAOCONG(l)break
case 2: XIUGEI(l)break
case 5: SHANCHU(l)break
default: getchar()break
}
} end:
getchar()
}
#include <stdio.h>#include <stdlib.h>
#define STU_NUM 10 /*宏定义学生的数量*/
struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/
{
char stu_id[20]/*学生学号;*/
float score[3]/*三门课成绩;*/
float total/*总成绩;*/
float aver/*平均成绩;*/
}
/*排序用一个函数来实现*/
void SortScore(student *stu,int n)
{
student stud
for(int i = 0i <n-1i++)
for(int j = i+1 j <nj++)
{
if(stu[i].total <stu[j].total)
{
stud = stu[i]
stu[i] = stu[j]
stu[j] = stud
}
}
}
int main( )
{
student stu[STU_NUM]/*创建结构体数组中有10个元素,分别用来保存这10个人的相关信息。*/
/*输入这十个学生的相关信息*/
for(int i = 0i<STU_NUMi++)
{
printf("请输入第%d个学生的学号:",i+1)
scanf("%s",&stu[i].stu_id)
printf("输入第%d个学生的数学成绩:",i+1)
scanf("%f",&stu[i].score[0])
printf("输入第%d个学生的英语成绩:",i+1)
scanf("%f",&stu[i].score[1])
printf("输入第%d个学生的计算机成绩:",i+1)
scanf("%f",&stu[i].score[2])
stu[i].total = stu[i].score[0]+stu[i].score[1]+stu[i].score[2]
stu[i].aver = stu[i].total/3
}
printf("\n")
SortScore(stu,STU_NUM)/*调用排序函数*/
/*输出排序后的各学生的成绩*/
for(i = 0 i <STU_NUMi++)
{
printf("序号: %d\t",i)
printf("学号:%s\t",stu[i].stu_id)
printf("数学:%f\t",stu[i].score[0])
printf("英语:%f\t",stu[i].score[1])
printf("计算机:%f\t",stu[i].score[2])
printf("平均成绩:%f\t",stu[i].aver)
printf("总分:%f\t",stu[i].total)
printf("\n\n")
}
return 0
}
注:(源程序中主要标识符含义说明)
#define STU_NUM 10 /*宏定义学生的数量*/
struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/
{
char stu_id[20]/*学生学号;*/
float score[3]/*三门课成绩;*/
float total/*总成绩;*/
float aver/*平均成绩;*/
}
一.选择题1、若a是float型变量,b是unsigned型变量,以下输入语句(A)是合法的。
A) scanf("%6.2f%d",&a,&b) B) scanf("%f%n",&a,&b)
C) scanf("%f%3o",&a,&b) D) scanf("%f%f",&a,&b)
2、设以下变量均为int类型,则值不等于7的表达式是( C)。
A) (x=y=6,x+y,x+1) B) (x=y=6,x+y,y+1)
C) (x=6,x+1,y=6,x+y) D) (x=6,x+1,y=x,y+1)
3、设变量a是整型,b是实型,c是双精度型,则表达式10+'a'+b*c值的数据类型为( C)。
A) int B)float C)double D)不确定
4、设有说明:char wint xfloat ydouble z则表达式 w*x+z-y 值的数据类型为(D )。
A)float B) char C) int D) double
5、若给定条件表达式(x)? (a++):(a--), 则表达式x (没明白题的意思)。
A) 和(x==0)等价 B) 和(x==1)等价
C) 和(x!=0)等价 D) 和(x!=1)等价
6、C语言中while和do-while循环的主要区别是(A )
A) do-while的循环体至少无条件执行一次
B) while的循环控制条件比do-while的循控制条件严格
C) do-while允许从外部转到循环体内
D) do-while的循环体不能是复合句
7、若有说明:int a[10],则对a数组元素的正确引用是( D)
A) a[10] B)a[3.5] C)a(5) D)a[10-10]
8、设以下变量均为int类型,则值不等于7的表达式是(和上边题目重了 )。
A) (x=y=6,x+y,x+1) B) (x=y=6,x+y,y+1)
C) (x=6,x+1,y=6,x+y) D) (x=6,x+1,y=x,y+1)
9、设i和x 都是int类型,则以下for循环(A )。
for(i=0,x=0i<=9&&x!=876i++) scanf("%d",&x)
A) 最多执行者10次 B) 最多执行者9次
C) 是无限循环 D) 循环体一次也不执行
二、填空题(每小题2分,共10分)
1、以下程序的输出结果为 2,3,2,2。
main()
{int i,j,m,n
i=1j=2m=++in=j++
printf("%d,%d,%d,%d",i,j,m,n)
}
2、设 a 和 n 为整型变量,a=10,n=5,则表达式 a*=3+6 的值为90(你的题目有点问题,怎么没有n) 。
3、设x=1,y=2,z=3,则表达式 z||x>y&&11的值为1。
4、执行语句int a=3a+=a-=a*a后,a的值是-12 。
5、若 int i,j,k则计算表达式 x=(i=4,j=16,k=31)后,x的值为 31。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)