
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0/* */
struct student
{
char num[10]/* 学号 */
char name[20]
char sex[4]
char yuan
int ban
char neartime[10]/* 最近更新时间 */
}
typedef struct node
{
struct student data
struct node *next
}Node,*Link
void menu()
{
printf("********************************************************************************")
printf("\t1登记学生资料\t\t\t\t\t2删除学生资料\n")
printf("\t3查询学生资料\t\t\t\t\t4修改学生资料\n")
printf("\t5保存学生资料\t\t\t\t\t0退出系统\n")
printf("********************************************************************************\n")
}
void printstart()
{
printf("-----------------------------------------------------------------------\n")
}
void Wrong()
{
printf("\n=====>提示:输入错误!\n")
}
void Nofind()
{
printf("\n=====>提示:没有找到该学生!\n")
}
void printc() /* 本函数用于输出中文 */
{
printf("学号\t 姓名性别 学院 班级\n")
}
void printe(Node *p)/* 本函数用于输出英文 */
{
printf("%-12s%s\t%s\t%c\t%d\n",p->data.num,p->data.name,p->data.sex,p->data.yuan,p->data.ban)
}
Node* Locate(Link l,char findmess[],char nameornum[]) /* 该函数用于定位连表中符合要求的接点,并返回该指针 */
{
Node *r
if(strcmp(nameornum,"num")==0) /* 按学号查询 */
{
r=l->next
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r
r=r->next
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查询 */
{
r=l->next
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r
r=r->next
}
}
return 0
}
void Add(Link l) /* 增加学生 */
{
Node *p,*r,*s
char num[10]
r=l
s=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->data.num,num)==0)
{
printf("=====>提示:学号为'%s'的学生已经存在,若要修改请你选择'4 修改'!\n",num)
printstart()
printc()
printe(s)
printstart()
printf("\n")
return
}
s=s->next
}
p=(Node *)malloc(sizeof(Node))
strcpy(p->data.num,num)
printf("请你输入姓名:")
scanf("%s",p->data.name)
getchar()
printf("请你输入性别:")
scanf("%s",p->data.sex)
getchar()
printf("请你输入学院:")
scanf("%c",&p->data.yuan)
getchar()
printf("请你输入班级:")
scanf("%d",&p->data.ban)
getchar()
/* 信息输入已经完成 */
p->next=NULL
r->next=p
r=p
shoudsave=1 }
}
void Qur(Link l) /* 查询学生 */
{
int sel
char findmess[20]
Node *p
if(!l->next)
{
printf("\n=====>提示:没有资料可以查询!\n")
return
}
printf("\n=====>1按学号查找\n=====>2按姓名查找\n")
scanf("%d",&sel)
if(sel==1)/* 学号 */
{
printf("请你输入要查找的学号:")
scanf("%s",findmess)
p=Locate(l,findmess,"num")
if(p)
{
printf("\t\t\t\t查找结果\n")
printstart()
printc()
printe(p)
printstart()
}
else
Nofind()
}
else if(sel==2) /* 姓名 */
{
printf("请你输入要查找的姓名:")
scanf("%s",findmess)
p=Locate(l,findmess,"name")
if(p)
{
printf("\t\t\t\t查找结果\n")
printstart()
printc()
printe(p)
printstart()
}
else
Nofind()
}
else
Wrong()
}
void Del(Link l) /* 删除 */
{
int sel
Node *p,*r
char findmess[20]
if(!l->next)
{
printf("\n=====>提示:没有资料可以删除!\n")
return
}
printf("\n=====>1按学号删除\n=====>2按姓名删除\n")
scanf("%d",&sel)
if(sel==1)
{
printf("请你输入要删除的学号:")
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")
shoudsave=1
}
else
Nofind()
}
else if(sel==2)
{
printf("请你输入要删除的姓名:")
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")
shoudsave=1
}
else
Nofind()
}
else
Wrong()
}
void Modify(Link l)
{
Node *p
char findmess[20]
if(!l->next)
{
printf("\n=====>提示:没有资料可以修改!\n")
return
}
printf("请你输入要修改的学生学号:")
scanf("%s",findmess)
p=Locate(l,findmess,"num")
if(p)
{
printf("请你输入新学号(原来是%s):",p->data.num)
scanf("%s",p->data.num)
printf("请你输入新姓名(原来是%s):",p->data.name)
scanf("%s",p->data.name)
getchar()
printf("请你输入新性别(原来是%s):",p->data.sex)
scanf("%s",p->data.sex)
printf("请你输入新的学院:",p->data.yuan)
scanf("%c",&p->data.yuan)
getchar()
printf("请你输入新的班级(原来是%d):",p->data.ban)
scanf("%d",&p->data.ban)
getchar()
printf("\n=====>提示:资料修改成功!\n")
shoudsave=1
}
else
Nofind()
}
void Save(Link l)
{
FILE* fp
Node *p
int flag=1,count=0
fp=fopen("c:\\student","wb")
if(fp==NULL)
{
printf("\n=====>提示:重新打开文件时发生错误!\n")
exit(1)
}
p=l->next
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next
count++
}
else
{
flag=0
break
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d条记录已经保存.)\n",count)
shoudsave=0
}
fclose(fp)
}
void main()
{
Link l/* 连表 */
FILE *fp/* 文件指针 */
int sel
char ch
char jian
int count=0
Node *p,*r
printf("\t\t\t\t学生成绩管理系统\n\t\t\t\t-------建筑电气及智能化0801\n")
l=(Node*)malloc(sizeof(Node))
l->next=NULL
r=l
fp=fopen("C:\\student","rb")
if(fp==NULL)
{
printf("\n=====>提示:文件还不存在,是否创建?(y/n)\n")
scanf("%c",&jian)
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb")
else
exit(0)
}
printf("\n=====>提示:文件已经打开,正在导入记录......\n")
while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node))
if(fread(p,sizeof(Node),1,fp)) /* 将文件的内容放入接点中 */
{
p->next=NULL
r->next=p
r=p/* 将该接点挂入连中 */
count++
}
}
fclose(fp)/* 关闭文件 */
printf("\n=====>提示:记录导入完毕,共导入%d条记录.\n",count)
while(1)
{
menu()
printf("请你选择 *** 作:")
scanf("%d",&sel)
if(sel==0)
{
if(shoudsave==1)
{ getchar()
printf("\n=====>提示:资料已经改动,是否将改动保存到文件中(y/n)?\n")
scanf("%c",&ch)
if(ch=='y'||ch=='Y')
Save(l)
}
printf("\n=====>提示:你已经退出系统,再见!\n")
break
}
switch(sel)
{
case 1:Add(l)break/* 增加学生 */
case 2:Del(l)break/* 删除学生 */
case 3:Qur(l)break/* 查询学生 */
case 4:Modify(l)break/* 修改学生 */
case 5:Save(l)break/* 保存学生 */
case 9:printf("\t\t\t==========帮助信息==========\n")break
default: Wrong()getchar()break
}
}
}
第二个:
#include<stdio.h>
//定义结构体
struct student
{
int number
char name[20]
float score1
float score2
float score3
float ave
}
//单个学员录入函数
void input(struct student *st)
{
printf("\n学号: ")
scanf("%d",&st->number)
printf("姓名: ")
fflush(stdin)
gets(st->name)
printf("三门课成绩:\n成绩1: ")
scanf("%f",&st->score1)
printf("成绩2: ")
scanf("%f",&st->score2)
printf("成绩3: ")
scanf("%f",&st->score3)
st->ave=(st->score1+st->score2+st->score3)/3
}
//显示学员信息函数
void display(struct student *st,int n)
{
int i
printf("\n\t学号\t姓名\t平均成绩\n")
for(i=0i<ni++)
{
printf("\t%d\t%s\t%5.2f\n",st->number,st->name,st->ave)
st++
}
}
//排序函数,大到小
void sorting(struct student stu[],int n)
{
struct student temp
int i,j
for(i=0i<n-1i++)
{
for(j=0j<n-i-1j++)
{
if(stu[j].ave<stu[j+1].ave)
{
temp=stu[j]
stu[j]=stu[j+1]
stu[j+1]=temp
}
}
}
}
//插入函数
void insertinfo(struct student stu[], struct student *st1, int n)
{
int i,j
for(i=0i<ni++)
{
if(stu[i].ave<st1->ave)
break
}
for(j=nj>ij--)
stu[j]=stu[j-1]
stu[i]=*st1
}
//删除学员信息函数
void deleteinfo(struct student stu[], int num, int n)
{
int i,j
for(i=0i<ni++)
{
if(stu[i].number==num)
break
}
for(j=ij<nj++)
stu[j]=stu[j+1]
}
void main()
{
struct student stu[50],stu1
char ch
int i=0,num
//通过调用函数录入学员的信息
printf(" 请输入学员信息: \n\n")
do
{
input(&stu[i++])
printf("是否继续(Y/N)? ")
fflush(stdin)
ch=getchar()
}while(ch=='Y'||ch=='y')
//显示学员信息
printf("\n排序前学员的信息如下: \n")
display(stu,i)
//排序函数
sorting(stu,i)
//显示学员信息
printf("\n排序后学员的信息如下: \n")
display(stu,i)
//插入函数
printf("\n是否要插入新学员(Y/N)? ")
fflush(stdin)
ch=getchar()
while(ch=='Y'||ch=='y')
{
printf("\n请输入要插入学员的信息: \n")
input(&stu1)
insertinfo(stu,&stu1,i)
i++
printf("\n是否继续插入新学员(Y/N)? ")
fflush(stdin)
ch=getchar()
}
//显示学员信息
printf("\n插入后学员的信息如下: \n")
display(stu,i)
//删除函数
printf("\n是否要删除某个学员(Y/N)? ")
fflush(stdin)
ch=getchar()
while(ch=='Y'||ch=='y')
{
printf("\n请输入要删除学员的学号: \n")
scanf("%d",&num)
deleteinfo(stu,num,i)
i--
printf("\n是否继续删除某个学员(Y/N)? ")
fflush(stdin)
ch=getchar()
}
//显示学员信息
printf("\n删除后学员的信息如下: \n")
display(stu,i)
}
IT语境中的框架,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构。在此结构上可以根据具体问题扩展、安插更多的组成部分,从而更迅速和方便地构建完整的解决问题的方案。\x0d\x0a————补充解释————\x0d\x0a也就是说:1)框架本身一般不完整到可以解决特定问题;2)框架天生就是为扩展而设计的;3)框架里面可以为后续扩展的组件提供很多辅助性、支撑性的方便易用的实用工具(utilities),也就是说框架时常配套了一些帮助解决某类问题的库(libraries)或工具(tools)。\x0d\x0a约束性:针对解决特定问题的软件框架会首先定义问题的边界,进而将相关的软件组件约束在这个边界内,保持框架在解决问题方面上的内聚性。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)