
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
char name[20]
long int num
char sex[4]
int age
char address[30]
double tele_num
char aihao[20]
struct student *next
}//定义一个结构题
int TOTAL_NUM = 0//学生总数
struct student *head = NULL
void welcome ()//欢迎界面
void mainmenu ()//主界面
void record ()//记录数据
void insert(struct student *stu)//插入数据
void display(struct student *stu)//显示一个学生的信息
void displayAll ()//显示所有学生的信息
void query_by_num ()//按学号查询学生信息
void readData ()//读取文件里学生的信息
void writeData ()//向文件写入学生信息
void freeAll ()//清空链表内容
void del ()//删除学生信息
void change ()//更改学生信息
void devise (struct student *p)//选择更改内容
int main (void)
{
welcome ()
//显示主菜单
mainmenu ()
return 0
}
//显示欢迎信息
void welcome ()
{
printf ("+----------------------------------------------------+\n")
printf ("||\n")
printf ("| 欢迎使用网络工程学院信息安全092班学生信息管理系统 |\n")
printf ("||\n")
printf ("+----------------------------------------------------+\n")
}
//系统主菜单
void mainmenu ()
{
int choice
choice = -1
readData ()
printf ("\n温馨提示:为保证您的 *** 作得到保存,请按正常顺序退出系统^_^\n")
do
{
printf ("\n\n\n")
printf ("\t\t\t--------------------------------------------\n")
printf ("\t\t\t+信息安全092班学生信息管理系统 |\n")
printf ("\t\t\t--------------------------------------------\n")
printf ("\t\t\t+[1]----录入学生信息|\n")
printf ("\t\t\t+[2]----浏览学生信息|\n")
printf ("\t\t\t+[3]----查询学生信息|\n")
printf ("\t\t\t+[4]----删除学生信息|\n")
printf ("\t\t\t+[5]----修改学生信息|\n")
printf ("\t\t\t+[0]----退出系统|\n")
printf ("\t\t\t+*·*·*·*·*·*·*·*·*·*·*·*·*·*·*|\n")
printf ("\t\t\t--------------------------------------------\n")
printf ("请输入您的选择:")
scanf ("%d", &choice)
switch (choice)
{
case 0:
writeData ()
freeAll ()
exit (0)
case 1:
record ()
break
case 2:
displayAll ()
break
case 3:
query_by_num ()
break
case 4:
del ()
break
case 5:
change ()
break
default:
printf ("\n无效选项!")
break
}
}
while (choice != 0)
}
//录入学生信息
void record ()
{
struct student *p0
p0 = (struct student *)malloc(LEN)
printf ("请输入学生的姓名:")
scanf ("%s",p0->name)
printf ("请输入学生的学号:")
scanf ("%ld",&p0->num)
printf ("请输入学生的性别:")
scanf ("%s",p0->sex)
printf ("请输入学生的年龄:")
scanf ("%d",&p0->age)
printf ("请输入学生的地址:")
scanf ("%s",p0->address)
printf ("请输入学生的电话:")
scanf ("%lf",&p0->tele_num)
printf ("请输入学生的爱好:")
scanf ("%s",p0->aihao)
insert (p0)
printf ("该学生的信息为:\n")
printf ("-------------------------------------------------------------------------------\n")
printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")
display (p0)
}
void insert (struct student *stu)
{
struct student *p0, *p1, *p2
p1 = head
p0 = stu
if (head == NULL)
{
head = p0
p0->next = NULL
}
else
{
while ((p0->num >p1->num)&&(p1->next != NULL))
{
p2 = p1
p1 = p1->next
}
if (p0->num <= p1->num)
{
if (head == p1)
head = p0
else
p2->next = p0
p0->next = p1
}
else
{
p1->next = p0
p0->next = NULL
}
}
TOTAL_NUM++
}
void display (struct student *p)
{
printf ("%s\t%ld\t%d\t%s\t%s\t\t%.0f\t%s\n", p->name, p->num, p->age, p->sex, p->address, p->tele_num, p->aihao)
}
//浏览学生信息
void displayAll()
{
struct student *p
printf("学生总数:%d\n", TOTAL_NUM)
p = head
if (head != NULL)
{
printf("\n姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")
printf("-------------------------------------------------------------------------------\n")
do
{
display(p)
p = p->next
}
while(p != NULL)
}
printf ("\n")
}
//按学号查询学生信息
void query_by_num ()
{
int num
struct student *p1
printf("请输入学生的学号:")
scanf("%ld", &num)
if(head==NULL)
{
printf("无学生记录!\n")
return
}
p1 = head
while (num!=p1->num &&p1->next!=NULL)
p1 = p1->next
if (num == p1->num)
{
printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n")
printf ("-------------------------------------------------------------------------------\n")
display (p1)
}
else
printf ("没有该学生记录,请核对!")
}
//写入文件
void writeData ()
{
FILE* fp//文件指针
struct student *p
fp = fopen("1.txt", "w")
if (!fp)
{
printf("文件打开错误!")
return
}
fprintf(fp,"%d\n", TOTAL_NUM)
for(p = headp!= NULLp= p->next)
{
fprintf(fp,"%s\t%ld\t%s\t%d\t%s\t%.0f\t%s\n", p->name, p->num, p->sex, p->age, p->address, p->tele_num, p->aihao)
}
fclose (fp)
}
void freeAll ()
{
struct student *p1, *p2
p1 = p2=head
while(p1)
{
p2=p1->next
free (p1)
p1 = p2
}
}
//读取文件
void readData ()
{
FILE* fp//文件指针
struct student *p1, *p2
fp = fopen("1.txt", "r")
if (!fp)
{
printf("文件打开错误!")
return
}
fscanf(fp,"%d\n", &TOTAL_NUM)
head = p1 = p2 = (struct student *)malloc(LEN)
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao)
while(!feof(fp))
{
p1 = (struct student *)malloc(LEN)
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao)
p2->next = p1
p2 = p1
}
p2->next = NULL
fclose(fp)
}
//删除学生信息
void del ()
{
struct student *p1, *p2
long int num
if (head == NULL)
{
printf("无学生记录!\n")
return
}
printf("请输入您要删除的学生的学号:")
scanf("%ld", &num)
p1 = head
while (num != p1->num &&p1->next != NULL)
{
p2 = p1
p1 = p1->next
}
if(num == p1->num)
{
if(p1 == head)
head = p1->next
else p2->next = p1->next
free(p1)
TOTAL_NUM--
}
else
printf("没有该学生记录,请核对!\n")
}
//修改学生信息
void change ()
{
struct student *p1, *p2
long int num
if (head == NULL)
{
printf ("无学生记录!\n")
return
}
printf ("请输入您要修改的学生的学号:")
scanf ("%ld", &num)
p1 = head
while (num != p1->num &&p1->next != NULL)
{
p2 = p1
p1 = p1->next
}
if(num == p1->num)
devise (p1)
else
printf("没有该学生记录,请核对!\n")
}
void devise (struct student *p)
{
int choice
choice = -1
do
{
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("| 取消 请按 0 |\n")
printf("+----------------------+\n")
printf("请输入您的选择:")
scanf("%d", &choice)
switch (choice)
{
case 0:
return
case 1:
printf("请输入新姓名:")
scanf("%s", p->name)
break
case 2:
printf("请输入新学号:")
scanf("%d", &p->num)
break
case 3:
printf("请输入新性别:")
scanf("%s", p->sex)
break
case 4:
printf("请输入新年龄:")
scanf("%s", &p->age)
break
case 5:
printf("请输入新地址:")
scanf("%s", p->address)
break
case 6:
printf("请输入新电话:")
scanf("%lf", &p->tele_num)
break
case 7:
printf("请输入新爱好:")
scanf("%s", p->aihao)
break
default:
printf("\n无效选项!")
break
}
}
while(choice != 0)
}
你说的叫学籍管理系统也可。我把我的课设结果发给你,一共参考。绝对没问题。比你的全面,你只须稍加修正。学籍管理系统
学籍信息,包括学院、班级、学号、姓名、专业、性别、出生日期,家庭地址,电话号码等。要求该系统具有浏览,增加,删除,查询,插入等功能。程序的主要实现可以用链表来实现。类设计完成后,输入足够的测试数据进行测试,将必要的测试及过程输入到文件中。菜单可以根据设计功能要求自由设计。
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdlib.h>
#include"Student.h"
#include"StuList.h"
class StuList//带表头节点的链表类
class Student //链表节点类
{
friend StuList
private://每个结点的具体信息
char school[12]//学院
char major[12]//专业
char class1[12]//班级
long number //学号
char name[9] //姓名
char sex[7] //性别
char birth[12]//出生年月
long phone //电话号码
char add[20] //家庭地址
Student *next
public:
Student(char* scl=NULL,char* mal=NULL,char* cal=NULL,long No=0,char* nal=NULL,char *sal=NULL,char *bil=NULL,char *adl=NULL,long phl=0)//构造函数定义,初始化各个参数
}
class StuList //带表头节点的链表类
{
private:
Student *head,*current//定义指针
public://以下是成员函数
StuList()
~StuList()
void makeEmpty()
void add(char* scl,char* cal,char* mal,long No,char* nal,char *sal,char *bil,char *adll,long phl)
void insert(char* scl,char* cal,char* mal,long No,char* nal,char *sal,char *bil,char *adl,long phl)
void delet(long No,char* nal)
void searchStu1(char* nal)
void searchStu2(long no)
void chazhao()
void print()
void save()
}
Student::Student(char* scl,char* mal,char* cal,long No,char* nal,char *sal,char *bil,char *adl,long phl)
// Student类的构造函数定义,初始化各个参数
{
……/
}
StuList::StuList()//StuList类的构造函数
{
……
}
StuList::~StuList()//StuList类的析构函数
{
……
}
void StuList::makeEmpty() //清空链表
{……}
void StuList::searchStu1(char* nal) //按姓名查找链表中的节点,打印信息
{
int a=0
current=head->next
do
{
if(strcmp(current->name,nal)==0)//strcmp为比较字符串
{
cout<<"查到姓名为"<<current->name<<"的学生的信息:\n"
cout<<"--------------------------------------------------------------------\n"
cout<<"学院\t专业\t班级\t学号\t姓名\t性别\t生日\t住址\t电话\n"
cout<<"--------------------------------------------------------------------\n"
cout<<current->school<<"\t"<<current->major<<"\t"<<current->class1<<"\t"<<current->number<<"\t"
cout<<current->name<<"\t"<<current->sex<<"\t"<<current->birth<<"\t"<<current->add<<"\t"<<current->phone<<endl
a++
}
current=current->next
}while(current!=NULL)
if(a==0) cout<<"没找到!"<<endl
else cout<<"\n共"<<a<<"条记录!\n"
}
void StuList::searchStu2(long no) //按学号查找链表中的节点,打印信息
{
int b=0
current=head->next
do
{
if(current->number==no)
{
cout<<"查到学号为"<<current->number<<"的学生的信息:\n"
cout<<"--------------------------------------------------------------------\n"
cout<<"学院\t专业\t班级\t学号\t姓名\t性别\t生日\t住址\t电话\n"
cout<<"--------------------------------------------------------------------\n"
cout<<current->school<<"\t"<<current->major<<"\t"<<current->class1<<"\t"<<current->number<<"\t"
cout<<current->name<<"\t"<<current->sex<<"\t"<<current->birth<<"\t"<<current->add<<"\t"<<current->phone<<endl
b++
}
current=current->next
}while(current!=NULL)
if(b==0) cout<<"没找到!"<<endl
else cout<<"\n共"<<b<<"条记录!\n"
}
void StuList::print() //输出链表
{
……
}
void StuList::chazhao()//查找函数
{
if(head->next==NULL)//链表为空
{
cout<<"链表为空!"<<endl
return
}
int k
do
{
cout<<"\n\n\t\t-*-*-*-*-*-*查找功能子菜单-*-*-*-*-*-*\n"
cout<<"\t\t** **\n"
cout<<"\t\t**1、按照姓名查找 **\n"
cout<<"\t\t**2、按照学号查找 **\n"
cout<<"\t\t**3、退出查找 **\n"
cout<<"\t\t** **\n"
cout<<"\t\t-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*\n\n"
cout<<"请选择:"
cin>>k
char sear[16]
long no
switch(k)
{
case 1:
cout<<"姓名:"cin>>sear
StuList::searchStu1(sear)//调用按姓名查找函数
break
case 2:
cout<<"学号:"cin>>no
StuList::searchStu2(no)//调用按姓名查找函数
break
case 3:
char t
cout<<"退出查找?(y/n):"cin>>t
if(t!='y') k=4
else k=0
break
}
}while(k!=0)
}
void StuList::save()//文件保存
{
Student* p
p=head->next
fstream out
out.open("F:\\maqiong\\学籍管理系统.txt",ios::app)
out<<"********************************************************************\n"
out<<"学院\t专业\t班级\t学号\t姓名\t性别\t生日\t住址\t电话\n"
out<<"--------------------------------------------------------------------\n"
do
{ out<<p->school<<"\t"<<p->major<<"\t"<<p->class1<<"\t"<<p->number<<"\t"<<p->name<<"\t"<<p->sex<<"\t"<<p->birth<<"\t"<<p->add<<"\t"<<p->phone<<endl
p=p->next
}while(p!=NULL)
out.close()
}
void menu()//菜单函数
{
cout<<endl<<"\t"<<"*-*-*-*-*-*-*-*-*-*-菜单*-*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl
cout<<"\t"<<"** **"<<endl
cout<<"\t"<<"** 1.加入学生资料 2.插入一个学生**"<<endl
cout<<"\t"<<"** 3.移除一个学生 4.显示该表**"<<endl
cout<<"\t"<<"** 5.查找学生资料 6.清空该表**"<<endl
cout<<"\t"<<"** 7.显示菜单 0.退出程序**"<<endl
cout<<"\t"<<"** **"<<endl
cout<<"\t"<<"*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"<<endl<<endl
}
void main()
{
char cmd
StuList* list=NULL
list=new StuList
menu()
do
{
cout<<endl<<"请选择要进行的 *** 作序号(7-显示菜单):"//输入命令
cin>>cmd
if(list==NULL) //检查输入的命令是否合适
while(cmd!='1'&&cmd!='8'&&cmd!='0')
{cout<<"还没有建立链表,请先建立链表:"cin>>cmd}
switch(cmd) //匹配命令
{
case('1'): //加入学生信息到链表后
char insschool2[12],insclass12[12],insmajor2[12],insname2[12],inssex2[7],insbirth2[12],insadd2[12]
int insnumber2,insphone2
cout<<"请输入学生信息"<<'\n'
cout<<"学院:"cin>>insschool2
……
……
list->add(insschool2,insmajor2,insclass12,insnumber2,insname2,inssex2,insbirth2,insadd2,insphone2)
list->save()
break
case('2'): //按学号插入一个学生
char insschool3[12],insmajor3[12],insclass13[12],insname3[12],inssex3[7],insbirth3[12],insadd3[12]
int insnumber3,insphone3
cout<<"学院:"cin>>insschool3
……
……
list->insert(insschool3,insmajor3,insclass13,insnumber3,insname3,inssex3,insbirth3,insadd3,insphone3)
list->save()
break
case('3'): //删除一个学生信息
char tem
cout<<"删除一个学生?(y/n)"cin>>tem
if(tem=='y')
{
int remchar insname4[12]
cout<<"学号:"cin>>rem
cout<<"姓名:"cin>>insname4
list->delet(rem,insname4)
list->print()
list->save()
break
}else break
case('4'): //显示所有学生
list->print()break
case('5'): //查找学生信息
list->chazhao()break
case('6'): //清空链表
char tin
cout<<"删除链表退出?(y/n):"cin>>tin
if(tin=='y')
{
list->makeEmpty()
cout<<"链表为空"<<endl
break
}
else break
case('7'): //显示菜单
menu()
break
case('0'): //退出
if(list==NULL) break
char temp
cout<<"删除链表并退出?(y/n):"cin>>temp
if(temp=='y'){list->~StuList()list=NULL}
else cmd=10break
default:
cout<<"请输入菜单中的命令!"<<endl
}
}while(cmd!='0')
}
程序开发无非遵循几个步骤:1.需求分析:通过对市场、客户调查得出需要实现的功能,你这里就自己考虑或和朋友交流得出要实现的功能,给出点个人想法:既然是学籍信息管理必然有录入、查询、显示、修改等基本功能,然后就是统计、密码、管理员和游客权限划分之类的功能,然后延伸出来的就是管理员设置、游客设置等功能。
2.结构设计:通过对功能的把握,设计程序的基本结构,我的理解:首先登陆系统肯定是一个无限循环,提供菜单对应各个功能,用户可以进入每个小功能菜单,各个小功能菜单需提供真实 *** 作和一个返回上一层 *** 作等等。
3.功能、结构都明确了就可以开始写代码了,不在详述。。。。。。。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)