@XingdingCAO
2017-07-16T06:17:15.000000Z
字数 4268
阅读 3458
简易打分系统源码地址:Vote(坚果云)
实际,很难严格按照自顶向下的开发顺序进行,因为只有从表现层发现需求,才能设计对应的业务逻辑层和数据访问层。

Model(部分)
//Accountnamespace Vote.Models{using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;[Table("Account")]public partial class Account{[Key][StringLength(10)]public string Username { get; set; }[Required][StringLength(10)]public string Password { get; set; }public int GroupID { get; set; }}}//DbContextnamespace Vote.Models{using System.Data.Entity;public partial class AccountDb : DbContext{public AccountDb(): base("name=AGM_Conn"){}public virtual DbSet<Account> Accounts { get; set; }protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Entity<Account>().Property(e => e.Username).IsFixedLength();modelBuilder.Entity<Account>().Property(e => e.Password).IsFixedLength();}}}
//Groupnamespace Vote.Models{using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;[Table("Group")]public partial class Group{[Key][DatabaseGenerated(DatabaseGeneratedOption.None)]public int Id { get; set; }[Required]public int MemberCount { get; set; }[Required][StringLength(10)]public string LeaderName { get; set; }}}//DbContextnamespace Vote.Models{using System.Data.Entity;public partial class GroupDb : DbContext{public GroupDb(): base("name=AGM_Conn"){}public virtual DbSet<Group> Groups { get; set; }protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Entity<Group>().Property(e => e.LeaderName).IsFixedLength();}}}
由于ASP.Net(webform)前后端耦合严重,所以只能尽量分离出一部分逻辑处理,而大部分逻辑处理都与表现实际耦合在一起。

asp:Content标签中设计元素*.aspx.cs文件和其他逻辑处理类分页面设计

打分实现Vote(仅显示该组员未打分的项目)


组内管理ManageGroup





.aspx.cs后缀文件中,必须实现的有:身份验证后设置AuthCookie,前端数据的获取与初步验证,GridView数据源的绑定等。单独的逻辑处理
身份验证相关BLL.Authectic
判断用户类别(引用情况:被Login.aspx.cs调用)
public static readonly int ADMIN = 2;public static readonly int LEADER = 1;public static readonly int USER = 0;public static readonly int INVALID = -1;public static int CheckUser(string username,string passwd);
根据Cookie返回用户类别
public static int FindCatalogBycookie();
通过Cookie返回用户所在小组
public static Group FindGroupBycookie();
根据Cookie返回用户名
public static string FindUsernameBycookie();
更改用户有关ManageUser(设计出现了点儿问题,参数应该只传入进过初步验证过后的数据,而包装成Model类与进一步验证则应该由BLL类完成)
//以组别注册public static bool AddGroup(Account[] list,bool[] valid,int leaderIndex=0);//添加组员public static bool AddUser(Account usr);//更改组长public static bool ChangeLeader(string usrname);//删除组员public static bool DelUser(Account usr);
与项目相关ManageProject(在后来发觉到前面设计的问题时,我尽量将参数设计未原始的数据类型,然后包装、验证后在访问DAL来实现)
public static int INVALID = -1;//非法public static int NONBEGIN = 0;//提交中public static int NORMAL = 1;//打分中public static int END = 2;//打分已截止//检查课题状态public static int CheckSubjectStatus(string name)//查找某一课题下的项目public static Project[] FindProjectsBySubjectName(string subjectName)//查找可提交的课题名(某个小组)public static string[] FindSubmitableSubject()//提交项目public static bool SubmitProject(string subjectName,int groupId)//提交分数public static bool SubmitMark(string subjectName, int groupId,double[] mark)//查找可以打分的项目(某个人)public static int[] FindMarkableProject(string subjectName)//查找可以打分的课题public static Subject[] FindMarkableSubject()//查找某一课题下项目的打分比例(小组)public static string[] FindVoteRatio(string subjectName)//查找某一课题下项目的得分public static double[][] FindVote(string subjectName)//添加课题public static bool AddSubject(string name,DateTime deadline,DateTime voteDeadline)
基本设计样式
namespace Vote.DAL{public class AccountDAL{private AccountDb _context;public AccountDAL(){_context = new AccountDb();}//添加用户public bool Add(Account usr,bool isLeader=false);//删除用户public bool Del(Account usr);//按照用户名查找该用户的类别public string FindUserCatalog(string username);//按照用户名查找该用户的信息public Account FindByUsername(string username);}}
保存到Excel的方法