关于学生管理系统
增删查改是最基础的操作
然后就是此基础上做完善
比如写一个账号密码? 又或者? 有一些输入提示
废话不多说直接上源码
账号是:NYLG
密码是:fengmang666
你们可以复制自己操作一下
有不懂的可以提问
每一个操作块都会有提示.
?
?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define S struct student //为了方便
struct student //创建结构体
{
int num; //学号
char name[15]; //名字
char sex[5]; //性别
int score; //年龄
struct student *next;
};
void welcome(); //欢迎
int denglu(); //登录
void menu(); //菜单
void add(S* head); //增加
void del(S* head); //删除
void search(S *head); //查找
void change(S *head); //修改
void show(S* head); //打印
void paixu(S*head); //排序
void pre(S* head); //保存
void duqu(); //读取
int main(){
int i=denglu();
if(i){
return 0;
} //登录函数
welcome(); //欢迎函数
system("color 80"); //控制台颜色
S *head=(S*)malloc(sizeof(S));
head->next=NULL; //创建一个头指针,使其指向空
int k=1;
while(k) {
system("pause");
system("cls");
menu();
printf(" \t \t \t \t \t 请输入数字 以实现对应的功能:\t");
scanf("%d",&k);
switch(k) {
case 1: add(head); break; //增加学生
case 2: del(head); break; //删除学生
case 3: search(head); break; //查找学生
case 4: change(head); break; //改变学生
case 5: show(head); break; //打印学生
case 6: pre(head); break; //保存文件
case 7:paixu(head); break; //成绩排序
case 8:duqu(); break; //读取文件
case 0: break; //退出程序
default:
printf("请按照指定的指令输入!!!\n");
}
}
return 0;
}
void menu(){
printf(" \t\t\t\t* * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" \t\t\t\t* 南阳理工学生管理系统 *\n");
printf(" \t\t\t\t* *\n");
printf(" \t\t\t\t* (1) 增加学生信息 *\n");
printf(" \t\t\t\t* (2) 删除学生信息 *\n");
printf(" \t\t\t\t* (3) 查找学生信息 *\n");
printf(" \t\t\t\t* (4) 修改学生信息 *\n");
printf(" \t\t\t\t* (5) 查看学生信息 *\n");
printf(" \t\t\t\t* (6) 保存学生信息 *\n");
printf(" \t\t\t\t* (7) 按照成绩从高到低排序 *\n");
printf(" \t\t\t\t* (8) 保读取保存的学生信息 *\n");
printf(" \t\t\t\t* (0) 退出学生管理系统 *\n");
printf(" \t\t\t\t* *\n");
printf(" \t\t\t\t* *\n");
printf(" \t\t\t\t* * * * * * * * * * * * * * * * * * * * * * * * *\n");
}
void welcome() { //欢迎函数
printf("\n \n");
printf(" \t\t\t * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf(" \t\t\t * *\n");
printf(" \t\t\t * 欢迎使用南阳理工学生管理系统 *\n");
printf(" \t\t\t * *\n");
printf(" \t\t\t * * * * * * * * * * * * * * * * * * * * * * * * *\n");
printf("\n \n \n ");
}
int denglu(){ //登录
char z[20]={"NYLG"},m[20]={"fengmang666"},zhanghao[20],mima[20];
int i=3;
while(i){
printf("\t\t\t\t请输入账户:\t");
scanf("%s",&zhanghao);
if(strcmp(zhanghao,z)==0){
while(i){
printf("\t\t\t\t请输入密码:\t");
scanf("%s",mima);
if(strcmp(mima,m)==0){
printf("密码正确!欢迎进入!");
return 0 ;
}
else
{
printf("密码错误!");
i--;
}
}
}
else
{
printf("账户错误!") ;
i--;
}
}
return 1;
}
void add(S* head){ //增加
printf("请输入要增加学生的数量: ");
int n;
scanf("%d",&n);
while(n--){
S *p=head;
S *q=(S*)malloc(sizeof(S));
q->next=NULL;
while(p->next!=0){
p=p->next;
}
printf("学号:");
scanf("%d",&q->num);
S*x=head->next;
int i=0; //判断是否学号重复
while(x){
if(x->num==q->num){
printf("学号相同,请重新输入!\n\n\n");
free(q);
i=1;
}
x=x->next;
}
if(i){
n++;
continue;
}
printf("姓名:");
scanf("%s",q->name);
printf("性别:");
scanf("%s",q->sex);
printf("分数:");
scanf("%d",&q->score);
printf("添加成功!\n");
p->next=q;
}
}
void del(S* head){ //删除
S *p=head;
S *q=head->next;
int n,k=0;
printf("请输入您要删除学生的学号:");
scanf("%d",&n);
while(q!=0){
if(q->num==n){
k=1;
p->next=q->next;
free(q);
q->next=NULL;
break; //注意跳出循环
}
p=p->next;
q=q->next;
}
if(k)
printf("删除成功!!");
else
printf("删除失败!!");
}
void search(S *head){ //搜索
S* p=head->next;
int n,i=1,k=0;
printf("若您想按照学号搜索请输入1_\n若您想按照姓名搜索请输入2:");
scanf("%d",&k);
if(k==1){ //第一种查找方法
printf("请输入您要查找学生的学号: ");
scanf("%d",&n);
while(p){
if(p->num==n){
printf("学号:%d\t名字:%s\t性别:%s\t分数:%d\n",p->num,p->name,p->sex,p->score);
i=0;
break;
}
p=p->next;
}
if(i){
printf("查无此人!!");
}
}
else if(k==2){ //第二种查找方法
printf("请输入学生姓名:");
char name1[15];
scanf("%s",name1);
while(p){
if(strcmp(p->name,name1)==0){
printf("学号:%-10d名字:%-10s性别:%-10s分数:%-10d\n",p->num,p->name,p->sex,p->score);
k=0;
break;
}
p=p->next;
}
if(k)
printf("查无此人!!");
}
}
void change(S *head){ //更改
S *p=head->next;
int n,i=1;
printf("请输入你要更改学生的学号:");
scanf("%d",&n);
while(p){
if(p->num==n){
printf("请输入更改后的:学号\t姓名\t性别\t分数\n : ");
scanf("%d %s %s %d",&p->num,p->name,p->sex,&p->score);
i=0;
printf("修改成功!");
break;
}
p=p->next;
}
if(i){
printf("查无此人!!");
}
}
void show(S* head){
S *p=head->next;
while(p){
printf("学号:%-10d",p->num);
printf("姓名:%-10s",p->name);
printf("性别:%-10s",p->sex);
printf("分数:%-10d\n",p->score);
p=p->next;
}
}
void pre(S* head){ //保存
S* p=head->next;
FILE *fp=fopen("学生.txt","w+");
while(p) {
fprintf(fp,"学号:%d\t",p->num);
fprintf(fp,"姓名:%s\t",p->name);
fprintf(fp,"性别:%s\t",p->sex);
fprintf(fp,"分数:%d\n",p->score);
p=p->next;
}
printf("保存成功!!!\n");
fclose(fp);
}
void paixu(S* head){ //按照分数从高到低排序
S*p1=head->next; //排序是内容的交换
S*p2=head;
while(p2!=NULL)
{
while(p1->next!=NULL){
if(p1->score < p1->next->score){
S* temp=(S*)malloc(sizeof(S));
temp->next=NULL;
//
temp->num=p1->next->num;
temp->score=p1->next->score;
strcpy(temp->name,p1->next->name);
strcpy(temp->sex,p1->next->sex);
//
p1->next->num=p1->num;
p1->next->score=p1->score;
strcpy(p1->next->name,p1->name);
strcpy(p1->next->sex,p1->sex);
//
p1->num=temp->num;
p1->score=temp->score;
strcpy(p1->name,temp->name);
strcpy(p1->sex,temp->sex);
//
free(temp);
temp->next=NULL;
}
p1=p1->next;
}
p2=p2->next;
p1=head->next;
}
printf("排序后的数据为:\n");
show(head);
}
void duqu(){ //读取文件
char a[10000];
int i=0;
FILE*fp=fopen("学生.txt","r");
while(fscanf(fp,"%s",a)!=EOF){
printf("%-10s",a);
if(++i%4==0)
printf("\n");
}
fclose(fp);
fp=NULL;
}
?
|