C语言程序设计--班级档案管理系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言程序设计--班级档案管理系统相关的知识,希望对你有一定的参考价值。

设计课题二:班级档案管理系统

一、问题描述:
对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。

二、功能要求:
1、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:学号、姓名、性别、年龄、备注。
2、本系统显示这样的菜单:
请选择系统功能项:
a. 学生基本信息录入
b. 学生基本信息显示
c. 学生基本信息保存
d. 学生基本信息删除
e. 学生基本信息修改(要求先输入密码)
f. 学生基本信息查询
(1) 按学号查询
(2) 按姓名查询
(3) 按性别查询
(4) 按年龄查询
g. 退出系统
3、执行一个具体的功能之后,程序将重新显示菜单。
4、将学生基本信息保存到文件中。
5、进入系统之前要先输入密码。
三、算法提示:
1、 数据结构:结构体类型数组
2、 数据库结构:下表构成该系统的基本数据库。

姓名 学号 性别 年龄 备注
char char char int char

四、测试数据:
学生人数N=10

谢谢了 很急的
各位大虾请务必看清楚题目
首先满足题目要求
只能用C
不是成绩系统- -

给,已经编译运行确认了:

#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];
int age;
;

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=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->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=p; M=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:\n PLEASE:");
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=1;i<=2;i++)

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 sel;long 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=1;i<=2;i++)

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);

break;clrscr();

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();
参考技术A 先贴上!自己写的。
/* 简易学生档案管理系统 win-tc和Dev-c++下运行良好,注意不是vc++下*/
#include<stdio.h>
#include<string.h>

#define BUFLEN 80 /* 缓冲区最大字符数 */
#define CODELEN 10 /* 学号最大字符数,实际请更改 */
#define NAMELEN 15 /* 姓名最大字符数,实际请更改*/
#define N 200 /* 最大学生人数,实际请更改*/
#define M 5 /* 课程数,实际请更改 */
struct record

char code[CODELEN+1]; /* 学号 */
char name[NAMELEN+1]; /* 姓名 */
int mark[M]; /* 课程成绩 */
float average; /* 平均成绩 */
stu[N];
int k=1,n,m;
int order[N];

void readfile();/* 函数声明 */
void seek();
void sort();
void insert();
void del();
void display();
void save();
void menu();

int main()
while(k)
menu();
system("pause");
return 0;


void readfile()/* 建立信息 */

char buf[BUFLEN],*p="student.dat";
FILE *fp;
int i=0;
if ((fp=fopen("student.dat","r"))==NULL)
printf("Open file %s error! Strike any key to exit!",p);
getch();
exit(0);

while(fscanf(fp,"%s %s%d%d%d%f",stu[order[i]].code,stu[order[i]].name,&stu[order[i]].mark[0],&stu[order[i]].mark[1],&stu[order[i]].mark[2],&stu[order[i]].average)==6)
i++;
order[i]=i;

fclose(fp);
n=i;
printf("录入完毕!\n");


void seek()
int i,j,item,flag;
float avr;
char s1[21]; /* 以姓名和学号最长长度+1为准 */
printf("------------------\n");
printf("1.按学号查询\n");
printf("2.按姓名查询\n");
printf("3.按成绩查询\n");
printf("4.退出本菜单\n");
printf("------------------\n");
while(1)
printf("请选择子菜单编号:");
scanf("%d",&item);
flag=0;
switch(item)

case 1:
printf("请输入要查询的学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[order[i]].code,s1)==0)
flag=1;
printf("该学生学号、姓名和 %d 门课成绩及平均成绩为:\n",M);
printf("%s %s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
printf("%-4d",stu[order[i]].mark[j]);
printf(" %.2f",stu[order[i]].average);
printf("\n");

if(flag==0)
printf("该学号不存在!\n"); break;

case 2:
printf("请输入要查询的学生的姓名:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[order[i]].name,s1)==0)
flag=1;
printf("该学生学号、姓名和 %d 门课成绩及平均成绩为:\n",M);
printf("%s %s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
printf("%-4d",stu[order[i]].mark[j]);
printf(" %.2f",stu[order[i]].average);
printf("\n");

if(flag==0)
printf("该姓名不存在!\n"); break;

case 3:
printf("请输入要查询的学生的成绩:\n");
scanf("%f",&avr);
for(i=0;i<n;i++)
if(stu[order[i]].average<avr)
flag=1;
printf("该学生学号、姓名和 %d 门课成绩及平均成绩为:\n",M);
printf("%s %s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
printf("%-4d",stu[order[i]].mark[j]);
printf(" %.2f",stu[order[i]].average);
printf("\n");

if(flag==0)
printf("低于该平均成绩的学生不存在!\n"); break;

case 4:return;

default:printf("请在1-4之间选择\n");




void sort() /*选择排序*/
int i,j,t,sum;
for(i=0;i<n;i++)
sum=0;
for(j=0;j<M;j++)
sum+=stu[order[i]].mark[j];
stu[order[i]].average=sum/3.0;

for(i=0;i<n-1;i++)/*共扫视n-1遍*/
for(j=i+1;j<n;j++)
if(stu[order[i]].average<stu[order[j]].average)
/*交换名次*/
t=order[i];
order[i]=order[j];
order[j]=t;

printf("学生成绩按分数从高到低排列为:\n");
for(i=0;i<n;i++)
printf("%-17s %-17s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
printf("%-4d",stu[order[i]].mark[j]);
printf(" %.2f\n",stu[order[i]].average);



void insert()
int i=n,j,flag;
printf("请输入待增加的学生数:\n");
scanf("%d",&m);
do
flag=1;
while(flag)
flag=0;
printf("请输入第 %d 个学生的学号:\n",i+1);
scanf("%s",stu[i].code);
for(j=0;j<i;j++)
if(strcmp(stu[i].code,stu[j].code)==0)
printf("已有该学号,请检查后重新录入!\n");
flag=1;
break; /*如有重复立即退出该层循环,提高判断速度*/


printf("请输入第 %d 个学生的姓名:\n",i+1);
scanf("%s",stu[i].name);
printf("请输入%d门课程的成绩:\n",M);
for(j=0;j<M;j++)
printf("course %d:",j+1);
scanf("%d",&stu[i].mark[j]);

if(flag==0)
order[i]=i;
i++;

while(i<n+m);
n+=m;
printf("录入完毕!\n\n");


void del()
int i,j,k,flag=0;
char s1[CODELEN+1];
printf("请输入要删除学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[order[i]].code,s1)==0)
flag=1;
for(j=i;j<n-1;j++)
stu[order[j]]=stu[order[j+1]];

if(flag==0)
printf("该学号不存在!\n");
if(flag==1)
printf("删除成功,显示结果请选择菜单6\n");
n--;



void display()
int i,j;
printf("所有学生学号、姓名和成绩为:\n");
for(i=0;i<n;i++)

printf("%-17s%-17s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
printf("%-4d",stu[order[i]].mark[j]);
printf(" %.2f",stu[order[i]].average);
printf("\n");



void save()
int i,j,k,flag=0;
FILE *fp;
fp=fopen("student.dat","w");
for(i=0;i<n;i++)
fprintf(fp,"%-17s%-17s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
fprintf(fp,"%-4d",stu[order[i]].mark[j]);
fprintf(fp," %.2f",stu[order[i]].average);
fprintf(fp,"\n");

fclose(fp);


void menu()/* 界面 */
int num;
printf(" \n\n简易学生信息管理系统\n\n");
printf("*****系统功能菜单*****\n");
printf("----------------------\n");
printf("1.读入学生信息\n");
printf("2.查询学生信息\n");
printf("3.按成绩排序\n");
printf("4.增加学生信息\n");
printf("5.按学号删除信息\n");
printf("6.显示当前信息\n");
printf("7.保存当前学生信息\n");
printf("8.退出系统\n");
printf("----------------------\n");
printf("请选择菜单编号:");
scanf("%d",&num);
switch(num)

case 1:readfile();break;/*在主函数中调用子函数时,子函数不要带上类型,这和声明子函数不同*/
case 2:seek();break;
case 3:sort();break;
case 4:insert();break;
case 5:del();break;
case 6:display();break;
case 7:save();break;
case 8:k=0;break;
default:printf("请在1-8之间选择\n");

参考技术B 班级档案c语言程序提供 参考技术C //****************************************************************************
//**** 说明:密码所在的文件位于c盘,文件名为1.txt。
//**** 学生基本信息最好保存在C盘,文件名为student.txt。
//****************************************************************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

#define N 3
struct student

char name[10];
char no[10];
char sex;
int age;
char bnote[100];
;
void print(bool menu)//打印基本信息

if (!menu)

printf("学生基本信息录入 ,press 1\n");

else

printf("学生基本信息显示 ,press 2\n");
printf("学生基本信息保存 ,press 3\n");
printf("学生基本信息删除 ,press 4\n");
printf("学生基本信息修改 ,press 5\n");
printf("学生基本信息查询 ,press 6\n");

printf("退出学生信息系统 ,press 7\n");


bool Check(char pas[6])//密码验证

FILE *fp;
char ch;
char a[7]=" ";
int i = 0;
if ((fp=fopen("c:\\1.txt","r"))==NULL)

printf("打开文件失败!\n");
exit(0);

ch=fgetc(fp);
while (ch!=EOF&&i<6)

a[i] = ch;
ch=fgetc(fp);
i++;

a[6] = '\0';
if (!strcmp(pas,a))

return true;

else

printf("密码错误\n");
return false;

fclose(fp);


void GetInfo(struct student *arr,int n)//学生基本信息录入


for (int i = 0;i<n;i++)

printf("输入学生的基本信息:name no sex age bnote\n");
scanf("%s %s %c %d %s",arr[i].name,arr[i].no,&arr[i].sex,&arr[i].age,arr[i].bnote);


void Display(struct student* arr,int n)//学生基本信息显示

printf("学生信息: Name NO Sex age Note\n");
for (int i = 0;i<n;i++)

printf("%15s%15s%15c%15d%15s\n",arr[i].name,arr[i].no,arr[i].sex,arr[i].age,arr[i].bnote);



void Save(struct student* arr,int n)//学生基本信息保存,保存在c:\\student.txt

FILE * fp;
fp= fopen("c:\\student.txt","w+");
if (fp == NULL)

printf("文件不存在!\n");
exit(0);


fwrite(arr,sizeof(struct student)*n,n,fp);
fclose(fp);


void Modfiy(struct student* arr,int n)//学生基本信息修改

char number[10];
bool flag=false;
char pass[6];
printf("请输入密码:\n");
scanf("%s",pass);
if (Check(pass))

printf("修改学生信息:\n");
printf("请输入学号:\n");
scanf("%s",number);
for (int i =0;i<n;i++)

if (!strcmp(number,arr[i].no))

printf("infor: name no sex age note\n");
printf("%12s%12s%12c%12d%12s\n",arr[i].name,arr[i].no,
arr[i].sex,arr[i].age,arr[i].bnote);
printf("please input information:\n");
scanf("%s%s%c%d%s",arr[i].name,arr[i].no,&arr[i].sex,&arr[i].age,arr[i].bnote);
Save(arr,n);
flag = true;


if (flag == false)

printf("该学生不存在!:\n");





void Delete(struct student* arr,int n)//学生基本信息删除

char number[10];
bool flag=false;
printf("Delete information:\n");
printf("please input the no:\n");
scanf("%s",number);
for (int i =0;i<n;i++)

if (!strcmp(number,arr[i].no))

strcpy(arr[i].name," ");
strcpy(arr[i].no," ");
strcpy(arr[i].bnote," ");

arr[i].sex = ' ';
arr[i].age = 0;
Save(arr,n);
flag = true;


if (flag == true)

printf("该学生不存在!:\n");



void Search(struct student* arr,int n)//学生基本信息查询

int temp,i;
bool flag=false;
printf("---------------通过学号查询,press 1-------------\n");
printf("---------------通过姓名查询,press 2-----------\n");
printf("---------------通过性别查询,press 3------------\n");
printf("---------------通过年龄查询,press 4------------\n");
printf("---------------退出,press 5 ------------\n");
scanf("%d",&temp);
switch (temp)

case 1://按照学号查询

char num[10];
printf("请输入学号:\n");
scanf("%s",num);
for ( i =0;i<n;i++)

if (!strcmp(num,arr[i].no))

printf("%12s%12s%12c%12d%12s\n",arr[i].name,arr[i].no,
arr[i].sex,arr[i].age,arr[i].bnote);
flag = true;


if (!flag)

printf("该学生不存在.\n");


break;
case 2://按照名字查询

char num[10];
printf("please input name:\n");
scanf("%s",num);
for ( i =0;i<n;i++)

if (!strcmp(num,arr[i].name))

printf("%12s%12s%12c%12d%12s",arr[i].name,arr[i].no,
arr[i].sex,arr[i].age,arr[i].bnote);
flag = true;


if (!flag)

printf("该学生不存在.\n");


break;
case 3://按照性别查询

char ch;
printf("请输入性别:\n");
//scanf("%c",&ch);
ch = getch();
for ( i =0;i<n;i++)

if (ch == arr[i].sex)

printf("%12s%12s%12c%12d%12s\n",arr[i].name,arr[i].no,
arr[i].sex,arr[i].age,arr[i].bnote);
flag = true;


if (!flag)

printf("t该学生不存在.\n");


break;
case 4://按照年龄查询

char num_age;
printf("请输入年龄:\n");
scanf("%d",&num_age);
for ( i =0;i<n;i++)

if (num_age == arr[i].age)

printf("%12s%12s%12c%12d%12s\n",arr[i].name,arr[i].no,
arr[i].sex,arr[i].age,arr[i].bnote);
flag = true;


if (!flag)

printf("该学生不存在.\n");


break;
default:
break;



void main()

struct student arr[N];
char ps[6];
bool flag =false;
printf("请输入密码:\n");
scanf("%s",ps);
flag = Check(ps);
if (flag)

int select;
print(false);
scanf("%d",&select);
while (0<select && select <7 )

switch (select)

case 1:
GetInfo(arr,N);
print(true);
break;
case 2:
Display(arr,N);
print(true);
break;
case 3:
Save(arr,N);
print(true);
break;
case 4:
Delete(arr,N);
print(true);
break;
case 5:
Modfiy(arr,N);
print(true);
break;
case 6:
Search(arr,N);
print(true);
break;
default:
break;

printf("请选择:\n");
scanf("%d",&select);



//有什么问题9点的时候问我本回答被提问者采纳
参考技术D 我有一个和你要求差不多的,没人能你也可以问我要哈,记到采纳,有解释的一个程序

进程基础

 

项目内容
这个作业属于哪个课程 <班级课程的主页链接 >
这个作业的要求在哪里 <作业要求链接接地址>
学号-姓名 18043213-丁宇航
作业学习目标

掌握Linux系统环境C语言编程概念;学习Linux系统进程概念

1. 请举例说明静态链接库的创建与使用。

ar:建立,修改档案或从档案中抽取成员
ar -r :替换归档文件中已有的文件或加入新文件
ar -t :显示归档文件内容

举例:

//文件名:add.c,加法
int add(int a,int b){
return a+b;
}
//文件名:sub.c,减法
int sub(int a,int b){
return a-b;
}
//文件名:main.c
#include <stdio.h>
int add(int a,int b);
int sub(int a,int b);
int main(){
printf("3 + 1 = %d\\n",add(3,1));
printf("3 - 1 = %d\\n",sub(3,1));
return 0;
}

 

 

 

2. 请举例说明共享库的创建与使用。

开始的目录结构:

//文件名:common.h
#ifndef _COMMON_
#define _COMMON_
int add(int a,int b);
int sub(int a,int b);
#endif
//文件名:add.c
int add(int a,int b){
return a+b;
}
//文件名:sub.c
int sub(int a,int b){
return a-b;
}
//文件名:main.c
#include<stdio.h>
#include"common.h"
int main(){
printf("3+1=%d\\n",add(3,1));
printf("3-1=%d\\n",sub(3,1));
}

 

 

 

创建共享库:

 

使用自己的共享库:

方式一:

 

 

 

方式二:

 

 

 

3. 编程实现一个简单文件复制命令。

 

mycp.c文件

 

 

复制的文件(test)

 

 

4. 使用fork创建一个子进程,进程创建成功后父子进程分别输出不同的内容。

 

 

5. 使用fork创建多个子进程。

 

用sleep函数来控制进程输出顺序:

 

6. 在 fork 之前以写的方式创建了一个文件 test.txt。然后 fork 出的子进程立即向文件中写入“world”,然后睡眠5秒。而父进程在 fork 后睡眠3秒后向 test.txt 写入 "hello",并关闭描述符。子进程恢复后,又向 test.txt 文件中写入 "lalala"后关闭描述符,结束。

 

7. 分别在主函数中使用execvp启动ls命令以及使用fork函数产生子进程调用execvp启动ls

在主函数中使用execvp启动ls命令

 

 

 使用fork函数产生子进程调用execvp启动ls

 

8. 创建5个僵尸进程,并在终端通过ps axf命令查看僵尸进程信息。

 

9. 通过wait来清理僵尸进程。

 

 

 

10. 父进程通过waitpid函数等待特定子进程结束,若该子进程不结束,父进程一直阻塞。

waitpid
(1)函数功能:用来等待某个特定进程的结束
(2)函数原型:
    pid_t waitpid(pid_t pid, int *status, int options);
(3)参数:
    status如果不为空,会把状态信息写到它指向的位置
    options允许改变waitpid的行为,最有用的一个选项是WNOHANG,它的作用是防止waitpid把调用者的执行挂起.
(4)返回值:成功返回等待子进程的pid,失败返回-1
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
void handler(int sig)
{
	pid_t pid;
	while ((pid = waitpid(-1,NULL,WNOHANG)) > 0)
	{
		printf("wait child sucess : %d\\n",pid);
		
	}
}
int main()
{
	signal(SIGCHLD,handler);
	pid_t pid = fork();
	if (pid == 0)
	{
		printf("child1 pid : %d\\n",getpid());
		sleep(3);
		exit(1);
	}
	pid_t pid2 = fork();
	if (pid2 == 0)
	{
		printf("child2 pid2 : %d\\n",getpid());
		sleep(5);
		exit(2);
	}
	pid_t pid3 = fork();
	if (pid3 == 0)
	{
		printf("child3 pid3 : %d\\n",getpid());
		sleep(7);
		exit(3);
	}
	printf("father pid : %d\\n",getpid());
	while (1)
	{
		printf("father do self\\n");
		sleep(1);
	}
	return 0;
}

 

 

 

 

以上是关于C语言程序设计--班级档案管理系统的主要内容,如果未能解决你的问题,请参考以下文章

进程基础

实验六 进程基础

实验六 进程基础

基于python学生档案管理系统的设计与实现.rar(毕业论文+程序源码+答辩PPT)

359VB1010车辆管理系统

聊聊客户档案模型的设计与管理